1、定义

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

语法

Object.entries(obj)

参数

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

返回值

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

描述

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

2、使用示例

const object = {a: 'string',b: 111,c: true,e: null,d: undefined,f: [3, 4, 5],g: { obj: '666' }
};for (const [key, value] of Object.entries(object)) {console.log(`${key}: ${value}`);
}// expected output:
// a: string
// b: 111
// c: true
// e: null
// d: undefined
// f: 3,4,5
// g: [object Object]
console.log(Object.entries(object));

// 正常对象枚举
const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]// key为索引的对象
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]// key是数字类型,会按照从小到大枚举
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]// getFoo是不可枚举的属性
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]// 非对象参数将被强制为对象
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]// 通过 for...of 方式遍历键值
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"
}// forEach 方法遍历
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:
const obj = { foo: "bar", baz: 42 };
const map = new Map(Object.entries(obj));
console.log(map); // Map(2) { "foo" => "bar", "baz" => 42 }// 将 Map 转换为 Object
const objByMap = Object.fromEntries(map);
console.log(objByMap); // { foo: 'bar', baz: 42 }// 获取 url 传参
const str = "page=1&&row=10&&id=2&&name=test"
const params = new URLSearchParams(str)
console.log(Object.fromEntries(params)) // { page: '1', row: '10', id: '2', name: 'test' }

3、实现

const entries = arg => {if (Array.isArray(arg)) return arg.map((x, index) => [`${index}`, x]);if (Object.prototype.toString.call(arg) === `[object Object]`) return Object.keys(arg).map(y => [y, arg[y]]);if (typeof arg === 'number') return [];throw '无法将参数转换为对象!'
}// test Number
console.log(entries(1)); // []// test Object
const obj = { foo: "bar", baz: 42 };
const map = new Map(entries(obj));
console.log(map); // Map(2) { "foo" => "bar", "baz" => 42 }// test Array
const arr = [1, 2, 3];
console.log(entries(arr)); // [["0", 1], ["1", 2], ["2", 3]]// test Error
console.log(entries('123')); // 无法将参数转换为对象!

const fromEntries = arg => {// Mapif (Object.prototype.toString.call(arg) === '[object Map]') {const resMap = {};for (const key of arg.keys()) resMap[key] = arg.get(key);return resMap;}// Arrayif (Array.isArray(arg)) {const resArr = {}arg.map(([key, value]) => resArr[key] = value);return resArr}throw '参数不可编辑!';
}// test Map
const map = new Map(Object.entries({ foo: "bar", baz: 42 }));
const obj = fromEntries(map);
console.log(obj); // { foo: 'bar', baz: 42 }// test Array
const arr = [['0', 'a'], ['1', 'b'], ['2', 'c']];
const obj = fromEntries(arr);
console.log(obj); // { 0: 'a', 1: 'b', 2: 'c' }// test Error
console.log(fromEntries(1)); // 参数不可编辑!

Object.entries()方法的使用和实现相关推荐

  1. JS中Object.entries()方法

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

  2. JavaScript深入理解对象方法——Object.entries()

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

  3. es6 遍历数组对象获取所有的id_ES6对象遍历Object.keys()方法

    [Object.keys()] ES5 引入了Object.keys()方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名var obj = { foo ...

  4. js中的entries方法的使用

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

  5. Object.entries()

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

  6. javascript 中Object.entries

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

  7. 探索 ES8 Object.entries()

    前言: 最近发布了es2017(即ES8),然后我也趁热学习一下ES8 1.为什么要引入Object.entries方法 由于ES5,ES6,ES7并没有提供遍历对象的键-值对属性的接口,所以可能官方 ...

  8. 深入理解Object.entries()

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

  9. Object.entries() 的使用

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

最新文章

  1. ReSharper修改命名风格
  2. James Fee’s 5 Predictions Geo for 2010 and 5 Things That Won’t Happen
  3. HDU 2128 Tempter of the Bone II BFS
  4. #软件配置管理#之坏味道搜集
  5. OpenGL渲染水water
  6. css --- 手机端,留言模块的样式
  7. c语言sizeof测量字符组长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...
  8. Structure from Motion 资料总结
  9. Cocoa依赖包管理工具
  10. 干程序员辣么久,你为什么还没有年薪60万?
  11. word图片靠右_如何设置word图片边缘透明
  12. java中怎样将字符串转化为date_java如何将string类型转为date类型?怎样转?
  13. jar k8s 自己的 部署_微服务架构 - 离线部署k8s平台并部署测试实例
  14. linux拓实n87驱动下载,拓实N87无线网卡驱动
  15. 隐藏窗口任务栏图标的三种方法
  16. 【网络】解决校园网Wi-Fi登录页无法自动弹出
  17. hibernate的关联映射 (员工管理)
  18. 点阵 LED 显示设计实验
  19. 3D俯视角色割草游戏模板+视频教程,免费发布 | 一周精品推荐
  20. QT——可视化界面ui

热门文章

  1. 苹果x屏幕失灵乱跳_苹果iphone11 pro max屏幕触摸失灵怎么办?
  2. iPhone升级iOS 16后Siri无法正常工作怎么办?3种解决办法
  3. DIY一个UNISOLDER焊台无线红外休眠座
  4. 几道加油站加油相关问题:最小加油次数、能否回到起点
  5. Win10下双系统Ubuntu14.04+GTX1070+CUDAcuDNN+Tensorflow环境搭建
  6. costmap_2d 中计算footprint 的内切圆半径和外切圆半径的函数解析——点到线段的距离计算
  7. 【lc3】汇编实现I/O中断
  8. 微信小程序——商品列表
  9. [笔记分享] [Camera] 相机的等效焦距计算
  10. igraph 牛刀小试