从对象数组中获取具有更多属性的对象

时间:2018-12-20 09:53:37

标签: javascript arrays json object properties

假设我在JSON文件中具有以下数组:

[
    { id: 1 },
    { name: 'foo' },
    { id: 3, name: 'foo', nick: 'bar' },
    { id: 4, nick: 'next' },
    { nick: 'nextnext' }
]

如何获得具有更多属性的对象?在此示例中,我应该获得第三项:{ id: 3, name: 'foo', nick: 'bar' }

如果另一个对象具有3个属性,我可以得到两个结果,或者最后找到一个,这没关系,我的目的是知道一个对象可以拥有的所有属性。

4 个答案:

答案 0 :(得分:2)

要处理多个结果,可以使用过滤器。

var data = [
    { id: 1 },
    { name: 'foo' },
    { id: 3, name: 'foo', nick: 'bar' },
    { id: 4, nick: 'next' },
    { nick: 'nextnext' },
    { id: 6, name: 'another 3', nick: '3'}
]

const mx = Math.max(...data.map(m => Object.keys(m).length));
const res = data.filter(f => Object.keys(f).length === mx)
console.log(res);

答案 1 :(得分:1)

您可以使用reduceObject.keys()返回长度更大的对象。

尝试以下方式:

var data = [
    { id: 1 },
    { name: 'foo' },
    { id: 3, name: 'foo', nick: 'bar' },
    { id: 4, nick: 'next' },
    { nick: 'nextnext' }
]

var res = data.reduce((a, c) => {
  return Object.keys(a).length > Object.keys(c).length ? a : c;
})
console.log(res);

答案 2 :(得分:1)

您可以创建一个数组并根据键的长度放置值。

由于您希望对象具有大多数键,因此可以获得最后一项。

var data = [
    { id: 1 },
    { name: 'foo' },
    { id: 3, name: 'foo', nick: 'bar' },
    { id: 4, nick: 'next' },
    { nick: 'nextnext' }
];

var res = data.reduce((a, c) => {
  const len = Object.keys(c).length;
  a[len] = a[len] || [];
  a[len].push(c);
  return a;
}, []).pop();
console.log(res);

答案 3 :(得分:0)

let biggestObj = {};

for(let el of array){
    if(Object.keys(el).length > Object.keys(biggestObj).length){
        biggestObj = el;
    }
}

这应该可以完成!