Как определить, есть ли запись в массиве объекта - PullRequest
0 голосов
/ 03 февраля 2020

В отличие от большинства вопросов, касающихся массивов объектов, а не объектов массивов. У меня есть такая структура данных, и мне нужно определить, содержат ли какие-либо из массивов, содержащихся в объекте, какие-либо значения.

Все, что мне нужно, это true / false, если любой массивов имеет хотя бы одно значение. Пожалуйста, также учтите усилие в моем (самостоятельном) ответе.

let pendingAdditions = {
  hospitals: ['Silencio Hospital','St Judes'],
  licenses: ['poe-tic license'],
  medschools: []
} 

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

Я ничего не нашел при поиске в Google, может быть, это потому, что ответ так же прост:

let somePendingAdditions = Object.values(pendingAdditions).some(arr => arr.length);

Однако есть альтернативное решение, которое, вероятно, не так эффективно, но также имеет интересные подводные камни, на которые стоит обратить внимание:

somePendingAdditions = 
    Boolean(Array.prototype.concat.apply([], Object.values(pendingAdditions)).length);

Подводные камни связаны с передачей правильного первого аргумента для применения. Обычно это делается с {} или null, но в первом случае {} будет записью в результирующем массиве; в случае передачи null возникает ошибка.

2 голосов
/ 03 февраля 2020

Как насчет Object.values с flat и includes.

// Check if Object has value as arrays and atleast one value is there.
const hasAnyEntry = (items) => Object.values(items).flat().length > 0;

const pendingAdditions = {
  hospitals: ['Silencio Hospital','St Judes'],
  licenses: ['poe-tic license'],
  medschools: []
}
console.log(hasAnyEntry(pendingAdditions));
console.log(hasAnyEntry({}));


// Check if given entry is exist in Object value arrays
const hasEntry = (items, entry) => Object.values(items).flat().includes(entry);

console.log(hasEntry(pendingAdditions, 'St Judes'));
console.log(hasEntry(pendingAdditions, 'Blah'));
...