Получить объект с большим количеством свойств из массива объектов - PullRequest
0 голосов
/ 20 декабря 2018

Предполагая, что у меня есть следующий массив в файле 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 голосов
/ 20 декабря 2018

Чтобы справиться с несколькими результатами, вы можете использовать фильтр.

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);
0 голосов
/ 20 декабря 2018
let biggestObj = {};

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

Это должно сделать работу!

0 голосов
/ 20 декабря 2018

Вы можете создать массив и поместить значения в зависимости от длины ключа.

Поскольку вам нужны объекты с большинством ключей, вы можете получить последний элемент.

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);
0 голосов
/ 20 декабря 2018

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...