Object.entries()但是对象而不是数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object.entries()但是对象而不是数组相关的知识,希望对你有一定的参考价值。
说我有一个对象:
var obj = { a:{}, b:1, c: new Set() };
没有工作就无法迭代对象,而Object.keys / values / entries并不是我想要的。 Object.entries()很接近,但我更喜欢它返回一个对象数组而不是一个2D数组,理想情况下引用完整(在适当的地方)。
所以类似于:
Object.items( obj ) = [ { a: {} }, { b: 1 }, { c: new Set() } ];
我知道我可以使用Object.entries()创建一个函数来执行此操作,我只想确认没有类似的东西。
答案
你是对的,没有任何东西可以做到这一点。你需要建立自己的功能,entries
是一个很好的起点。
var obj = { a:{}, b:1, c: new Set() };
var obj2 = Object.entries(obj).map((array) => ({ [array[0]]: array[1] }));
console.log(obj2);
console.log(obj2[2].c === obj.c);
另一答案
您可以为对象定义Symbol.iterator
,并使用一个属性获取单个对象。
var obj = { a:{}, b:1, c: new Set() },
array;
obj[Symbol.iterator] = function* () {
for (var [key, value] of Object.entries(this)) {
yield { [key]: value };
}
};
array = Array.from(obj);
console.log(array);
console.log(array[2].c === obj.c);
以上是关于Object.entries()但是对象而不是数组的主要内容,如果未能解决你的问题,请参考以下文章
Object构造函数的方法 之Object.entries()
Object.keys(),Object.values(),Object.entries()
不使用 Object.entries() 返回键值对数组的数组