У меня есть следующий объект и массив чисел. Как я могу определить, какое число в массиве не существует в качестве идентификатора в объекте? В следующем примере мне нужно 1453.
[
{id: 60, itemName: 'Main Location - 1100 Superior Road - Cleveland'}
{id: 1456, itemName: 'Third Location - 107,West 20th Street,Manhattan - New York'}
]
[60, 1453, 1456]
🤔 А знаете ли вы, что...
JavaScript имеет множество встроенных объектов, таких как Array, Date и Math.
Вы можете создать список идентификаторов существующих идентификаторов данных, используя .map() , а затем использовать .filter() и .includes()
const data = [
{id: 60, itemName: 'Main Location - 1100 Superior Road - Cleveland'},
{id: 1456, itemName: 'Third Location - 107,West 20th Street,Manhattan - New York'}
]
const ids = [60, 1453, 1456];
const dataIDs = data.map(ob => ob.id); // [60, 1456]
const notExistentIDs = ids.filter(id => !dataIDs.includes(id));
console.info(notExistentIDs); // [1453]
который вернет массив всех идентификаторов объектов (из data
), не перечисленных в вашем справочном массиве ids
.
const data = [
{ id: 60, itemName: "Main Location - 1100 Superior Road - Cleveland" },
{ id: 1456, itemName: "Third Location - 107,West 20th Street,Manhattan - New York" }
];
const ids = [60, 1453, 1456];
const result = ids.reduce(
(acc, curr) =>
data.some(d => d.id === curr) ? acc : [...acc, curr], []
);
console.info(result);
Для большего количества элементов данных и большего количества id
s я бы выбрал подход, который создает поиск на основе Set через карту, пингуя каждый из itemList
элемента id
...
const idLookup = new Set(itemList.map(({ id }) => id));
Поиск элементов непосредственно из экземпляра Set
или Карты выполняется намного быстрее, чем, например. повторяя снова и снова массив с помощью find или включает для каждого шага итерации задачи внешнего фильтра.
Фильтровать список несоответствующих элементов id
так же просто, как...
const listOfNonMatchingIds = idList.filter(id => !idLookup.has(id));
... пример кода ...
const itemList = [
{ id: 60, itemName: 'Main Location - 1100 Superior Road - Cleveland' },
{ id: 1456, itemName: 'Third Location - 107,West 20th Street,Manhattan - New York' },
];
const idList = [60, 1453, 1456];
const idLookup = new Set(itemList.map(({ id }) => id));
const listOfNonMatchingIds = idList.filter(id => !idLookup.has(id));
console.info({ listOfNonMatchingIds });
.as-console-wrapper { min-height: 100%!important; top: 0; }