Сравнить элементы массива 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, время: 10:01. |