Object.entries()但是对象而不是数组

时间:2018-03-01 16:44:08

标签: javascript object methods

说我有一个对象:

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()创建一个函数来执行此操作,我只是想确认已经有类似的东西。

2 个答案:

答案 0 :(得分:2)

你是对的,没有任何东西可以做到这一点。您需要构建自己的函数,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);




答案 1 :(得分:0)

您可以为对象定义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);