返回拥有最多属性的对象数组项

3

假设我有一个这样的对象数组:

const arr = [
   { a: 1, b: 2, c: 3, d: 4 },
   { a: 1 },
   { a: 1, b: 2, c: 3 },
   { a: 1, b: 2 }
];

如何返回具有最多属性/键的对象?最好使用高阶函数以高效简洁的方式实现。

2
属性是否具有相同的值? - Nina Scholz
不,这两个值是不同的,所以你的第二个解决方案是最合适的。谢谢 Nina。 - stickleBrick
2个回答

4
您可以将值分配给一个对象。

const 
    array = [{ a: 1, b: 2, c: 3, d: 4 }, { a: 1 }, { a: 1, b: 2, c: 3 }, { a: 1, b: 2 }],
    object = Object.assign({}, ...array);

console.log(object);

如果你有不同的值,你可以缩小数组。

const 
    array = [{ a: 1, b: 2, c: 3, d: 4 }, { a: 1 }, { a: 1, b: 2, c: 3 }, { a: 1, b: 2 }],
    object = array.reduce((a, b) => Object.keys(a).length > Object.keys(b).length
        ? a
        : b
    );

console.log(object);


在第一个解决方案中,它如何知道哪个对象具有最多的键? - Aalexander
@Alex,它只是将所有属性分配给目标对象,而不知道长度。通过具有相同名称属性的不同值,最后一个值获胜。 - Nina Scholz

1
你可以通过调用Object.keys(obj)并检查其length属性来获取对象中键的数量。 有了这个,你可以通过检查每对对象并返回具有最多键的一个作为一行代码来缩小数组:
const biggestObject = 
    arr.reduce((a, b) => Object.keys(a).length > Object.keys(b).length ? a : b);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接