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.entries() 数组变对象

Object构造函数的方法 之Object.entries()

Object.keys(),Object.values(),Object.entries()

不使用 Object.entries() 返回键值对数组的数组

在 Object.entries 上运行 forEach 不会返回与 for 循环相同的内容

如何在 Typescript 中输入 Object.entries() 和 Object.fromEntries?