Object.entries() &Object.values()

prosoal: object values/entries

Object.entries()

此方法签名如下:

Object.entries(value : any) : Array<[string,any]>

如果 JavaScript 数据结构具有键和值,条目是一个键值对,被编码为2元数组。Object.entries(x) 强制 x 为一个对象,并返回一个给定对象自己的可枚举属性[key,value]对的数组:

let obj = { one: 1, two: 2 };
for (let [k,v] of Object.entries(obj)) {
    console.log(`${JSON.stringify(k)}: ${JSON.stringify(v)}`);
}
// Output:
// "one": 1
// "two": 2

Object.entries(obj)
// [["one",1],["two",2]]

其键为 symbols 的属性被忽略:

Object.entries({ [Symbol()]: 123, foo: 'abc' });
// [ [ 'foo', 'abc' ] ]
通过 Object.entries() 设置为 Map 对象

Object.entries() 还允许你将一个对象设置为 Map 对象。这比使用2元数组的数组更简洁,但是键只能是字符串。

let map = new Map(Object.entries({
    one: 1,
    two: 2,
}));
console.log(JSON.stringify([...map]));
// [["one",1],["two",2]]

也可以处理复杂的数据结构

const info = {
  name: 'joey',
  age: 10,
  getName: function(){
    return 'hello'
  },
  person: {
    nick: 'yes',
    getInfo: function(){
      return false;
    }
  }
}
Object.entries(info);

=>

[['name', 'joey'],['age',10],['getName', function],['person',{nick:'yes', getInfo: function}]]

Object.values()

Object.values()方法返回一个给定对象自身的所有__可枚举__属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

此方法签名如下:

Object.values(value : any) : Array<any>

它的工作原理很像 Object.entries() ,但是,正如其名称所示,它只返回自己可枚举的字符串键属性的值:

Object.values({ one: 1, two: 2 }); // [ 1, 2 ]

Object.keys()

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

常见问题
  • 为什么 Object.entries() 的返回值是一个数组而不是一个迭代器?

在这种情况下的相关先例是 Object.keys() ,而不是,例如 Map.prototype.entries()

  • 为什么 Object.entries() 只返回自己的可枚举的字符串键属性?

再次说明,这样做与 Object.keys() 一致。该方法也忽略其 symbols 键的属性。最终,可能会有一个返回所有属性的 Reflect.ownEntries() 方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值