假设我在JSON文件中具有以下数组:
[
{ id: 1 },
{ name: 'foo' },
{ id: 3, name: 'foo', nick: 'bar' },
{ id: 4, nick: 'next' },
{ nick: 'nextnext' }
]
如何获得具有更多属性的对象?在此示例中,我应该获得第三项:{ id: 3, name: 'foo', nick: 'bar' }
如果另一个对象具有3个属性,我可以得到两个结果,或者最后找到一个,这没关系,我的目的是知道一个对象可以拥有的所有属性。
答案 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)
您可以使用reduce
和Object.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;
}
}
这应该可以完成!