参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。

例子:

const log = console.log;function Animal(name) {this.name = name;
}Animal.prototype.run = function() {console.log(`${this.name} run`);
}function Cat(name) {Animal.call(this, name);this.age = 8;
}Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;let c = new Cat("miao");
log("c = ", c);
for (let [k, v] of Object.entries(c)) { //不枚举原型中的属性log("entries k = ", k, ", v = ", v);
}for (let k in c) {log("in k = ", k, ", v = ", c[k]);
}
c.run();

结果:

$ node for.js
c =  Cat { name: 'miao', age: 8 }
entries k =  name , v =  miao
entries k =  age , v =  8
in k =  name , v =  miao
in k =  age , v =  8
in k =  constructor , v =  [Function: Cat]
in k =  run , v =  [Function]
miao run

例子:

const object1 = {a: 'somestring',b: 42
};for (const [key, value] of Object.entries(object1)) {console.log(`${key}: ${value}`);
}// expected output:
// "a: somestring"
// "b: 42"
// order is not guaranteed

语法

Object.entries(obj)

参数

obj

可以返回其可枚举属性的键值对的对象。

返回值

给定对象自身可枚举属性的键值对数组。

描述

Object.entries()返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。

示例

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]// array like object
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]// array like object with random key ordering
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]// getFoo is property which isn't enumerable
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]// non-object argument will be coerced to an object
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}// Or, using array extras
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
});

Object转换为Map

new Map() 构造函数接受一个可迭代的entries。借助Object.entries方法你可以很容易的将Object转换为Map:

var obj = { foo: "bar", baz: 42 };
var map = new Map(Object.entries(obj));
console.log(map); // Map { foo: "bar", baz: 42 }

Polyfill

要在较旧环境中添加兼容的Object.entries支持,你可以在 tc39/proposal-object-values-entries 中找到Object.entries的示例(如果你不需要任何对IE的支持),在 es-shims/Object.entries 资料库中的一个polyfill,或者你可以使用下面列出的简易 polyfill。

if (!Object.entries)Object.entries = function( obj ){var ownProps = Object.keys( obj ),i = ownProps.length,resArray = new Array(i); // preallocate the Arraywhile (i--)resArray[i] = [ownProps[i], obj[ownProps[i]]];return resArray;};

对于上述 polyfill 代码片段,如果你需要 IE9 以下的支持,那么你还需要一个 Object.keys polyfill(如 Object.keys页面上的)。

javascript 中Object.entries相关推荐

  1. JavaScript中Object.entries(obj)

    Object.entries(obj) 该方法返回对象 obj 自身的可枚举属性的键值对数组.结果是一个二维数组,数组中的元素是一个由两个元素 key ,value 组成的数组. let person ...

  2. JavaScript中Object对象方法超详细讲解举例说明仅此一篇

    JavaScript中Object对象方法超详细讲解举例说明仅此一篇 Object.assign() Object.create() Object.values() Object.entries() ...

  3. JavaScript中Object的总结

    基于原型继承,动态对象扩展,闭包,JavaScript已经成为当今世界上最灵活和富有表现力的编程语言之一. 这里有一个很重要的概念需要特别指出:在JavaScript中,包括所有的函数,数组,键值对和 ...

  4. JavaScript中Object对象深度遍历

    Object对象深度遍历 支持Object和Array混合型对象遍历.其中用到的对象类型判断方法,详见<JavaScript中Object对象类型判断> // 递归实现 // obj 为父 ...

  5. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. <一>, ECMAScript 3  1. 在E ...

  6. JS中Object.entries()方法

    Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for-in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性). co ...

  7. 如何理解JavaScript中Object.defineProperty【一】

    前言 当我们了解一个方法时,建议从以下几个维度着手 1.方法的定义 2.了解方法的使用场景 3.在场景中解决什么问题 带着这样的好奇心,去学习.研究,我们可能更好的理解.掌握.运用它 复制代码 定义 ...

  8. JavaScript 中 Object ,Prototype 相关的属性和方法

    1.Objuect 类型 Object 类型是所有对象的基类型,可以用 new 运算符产生一个 Object 类型. 开发者可以通过产生 Object 类型的实例并向其动态添加属性和方法来产生自己需要 ...

  9. JavaScript中Object.getOwnPropertyNames()与Object.keys(obj)的区别

    大部分情况下Object.getOwnPropertyNames()与Object.keys(obj)的功能是一样的,我们一般也是用来获取一个JSON对象中所有属性,例如 const obj = {p ...

最新文章

  1. Java(三):序列化
  2. 科研人员多维度测试GPT-3发现:它并不是一名“好学生”
  3. 解决SpringMVC中的 Could not find acceptable represent
  4. 牛客网 【每日一题】5月28日题目精讲 Protecting the Flowers
  5. python中location_使用python请求模块时的LocationValueError
  6. git(8)---git merge 和 git rebase 小结
  7. Apache 服务器的安全策略
  8. L1-017. 到底有多二-PAT团体程序设计天梯赛GPLT
  9. Vuex的API文档
  10. 流畅的python和cookbook学习笔记(五)
  11. Android ConstraintLayout布局详解
  12. 在遇到移动硬盘无法访问的情况下,如何无需格式化地修复硬盘?
  13. 数学建模 Lingo 基本算法模板
  14. 为什么程序员 996 会猝死,而老板 007 却不会?
  15. HDU - 2586 - How far away ? (最短路)
  16. 安装.net补丁后mscorsvw.exe占CPU100%的问题
  17. 基于Altium Designer进行单片机逻辑系统及模拟电路原理图设计
  18. 循环神经网络之LSTM、GRU
  19. Android ListView下拉刷新
  20. 秒杀设计 mysql_如何设计秒杀系统?

热门文章

  1. MacBook Pro死机强制重启键
  2. laravel从入门到精通之 php excel设置单元格边框只显示竖条
  3. 知识产权行业获客难?一招解决
  4. 微波链路视距(Line of Sight,LOS)传播勘测
  5. 替代SSD?Crossbar进军中国存储市场
  6. S32V234专业级AVM全景+ADAS解决方案
  7. java娘_如何调教Java娘来优化MC!
  8. compass项目配置文件config.rb
  9. 计算机主机电源接线,七个步骤教你主机电源如何接线
  10. 现货K线图知识之五:北坡炮兵并排跑