Сравнить элементы массива 2
коллеги, доброго времени суток. опять ступор. Походу надо в отпуск.
Итак))))))) Мне приходят объекты вида: let ob = { id: ... data: ... } Все это добро упаковываю в массив searchArray. Не могу сделать фильтр для сравнения нового объекта с элементами массива: let this.searchList = []; checkMatches(data) { if (this.searchList.length === 0 || data === null) { this.searchList.push(data); } else { this.searchList.forEach((item) => { if (item === null) return; if (item.id === data.id) return; this.searchList.push(data); }); } } null - это тоже результат от сервера, его нужно учитывать. Нужно добавлять объекты, только если data.id !== item.id, при наличии item.id. По факту после 2 элемента в this.searchList добавляется по несколько элементов за раз. please help!!!!! заранее благодарю |
const push = (function() { const container = []; const alreadyInContainerIndex = {}; const checkItem = function(item) { return item === null || !alreadyInContainerIndex[item.id]; }; return function(data) { if (!checkItem(data)) return; const index = container.push(data) - 1; if (data) alreadyInContainerIndex[data.id] = index; } })(); |
Роман Андреевич,
let this.searchList = []; checkMatches(data) { if (this.searchList.length === 0 || data === null) { this.searchList.push(data); } else { this.searchList.every((item) => { if (item === null) return true; if (item.id !== data.id) return true; }) && this.searchList.push(data); } } |
коллеги спасибо!!! помогли!!!
|
По-моему ваши алгоритмы не оптимальные.
У вас перед добавлением нового элемента сначала нужно пробежаться по всем элементам массива проверив нет ли там уже добавляемого элемента. Такое себе решение. |
Nexus, а как по вашему нужно делать????
Клиенту с сервера поступает объект, мне же его нужно где-то хранить, почему нет???? Почему проверять наличие существующего объекта так себе решение?????? |
Цитата:
Цитата:
|
:write:
<script> const container = []; const push = (function(container) { const alreadyInContainerIndex = {}; const checkItem = function(item) { return alreadyInContainerIndex.hasOwnProperty(item.id); }; return function(data) { if (data && checkItem(data)) return; container.push(data) if (data) alreadyInContainerIndex[data.id] = true } })(container); push(null); push(null); push({id : 1}) push({id : 1}) document.write(JSON.stringify(container, null, 4)) </script> |
Часовой пояс GMT +3, время: 01:39. |