Проверьте, есть ли у каждого идентификатора существующий объект в массиве - PullRequest
0 голосов
/ 07 июня 2018

Я хотел бы проверить, существует ли существующий объект для каждого идентификатора массива.

const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
  { _id: 'xxnQt5X8pfbcJMn6i' },
  { _id: 'Qt5X8pfbcJMn6ixxn' },
]

В этом примере я хотел бы получить false, поскольку второй идентификатор (fbcJMn6ixxnQt5X8p)не существует.

Это должно вернуть true:

const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
  { _id: 'xxnQt5X8pfbcJMn6i' },
  { _id: 'Qt5X8pfbcJMn6ixxn' },
  { _id: 'fbcJMn6ixxnQt5X8p' },
]

Это то, что я пробовал:

ids.every(id => target.find(element => element._id === id))

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

При большом количестве записей может быть быстрее использовать Set (поэтому мы получаем O(n + m) вместо O(n * m)):

const idSet = new Set(target.map(el => el._id));
const result = ids.every(id => idSet.has(id));
0 голосов
/ 07 июня 2018

Поскольку каждый сам по себе является методом проверки, он возвращает true или false через предоставленную функцию.Таким образом, вы можете просто вернуть false:

const res = const res = ids.every(id => target._id === id); console.log(res);

или true:

const res = ids.every(id => target._id !== id); console.log(res);

0 голосов
/ 07 июня 2018

Вы довольно близки, вам нужно передать функцию вместо объекта find, хотя - и я бы рекомендовал использовать some() вместо find, если вы хотите толькочтобы узнать, существует ли он, а не нужен объект взамен.

const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
  { _id: 'xxnQt5X8pfbcJMn6i' },
  { _id: 'Qt5X8pfbcJMn6ixxn' },
  { _id: 'fbcJMn6ixxnQt5X8p' },
]

const allIn = ids.every(id => target.some(({_id}) => id === _id));
console.log(allIn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...