<ui_graph_search :values="getStatus" @select="changeArray('status_id', 'where', $event)" :multiple="true">Статус</ui_graph_search>
<ui_chip removeByCallback v-for="selected in filterArray.status_id" @delete="removeFromWhereIn('status_id', 'where', $event)" :item="selected">{{ selected.name }}</ui_chip>
changeArray(name, subname, value) {
if (this.filterArray[name].length < 2) {
this.filterArray[name].push(value)
var filterId = this.filterArray[name].map((item)=>{
return item.id
})
var i = filterId.length,
result = [];
while(i--) {
if (result.join('').search(filterId[i]) == '-1') {
result.push(filterId[i])
}
}
this.$store.dispatch('table/updateFilter', { name: name, subname: subname, value: result});
}
},
В filterArray.status_id при выборе двух одинаковых статусов падают одинаковые объекты.
Подскажите, как отфильтровать массив объектов так, чтобы, если вдруг у объекта совпадает id, он не добавлялся.
Не понимаю в какой момент времени все это происходит.
UPDATE: на выходе например получается вот такая конструкция
[obj, obj1, obj2]
obj = {
id: 222
},
obj1 = {
id: 333
},
obj2 = {
id: 222
}
А нужно отфильтровать массив, чтобы на выходе было [obj, obj1]
Если после map(item => item.id) выходит такое [{id:222},{id:333}, ...], то значит
filterArray[name] у вас такой конструкции -
[
{id: {id: 444}},
{id: {id: 333}},
{id: {id: 222}}
]
А result.join('') дает такую строку - "[object Object][object Object][object Object]" и неудивительно, что ничего не фильтруется.
console.log([{id:222},{id:333},{id:444}].join(''))
Чтобы найти дубли, я заменил вашу конструкцию -
result.join('').search(filterId[i]) == '-1'
на
!result.find(el => el.id ==filterId[i].id)
const filterArray = [[ { id: {id: 222}}]];
function changeArray(name, subname, value) {
if (filterArray[name].length < 2) {
filterArray[name].push(...value);
var filterId = filterArray[name].map(item => item.id);
var i = filterId.length,
result = [];
while(i--)
if (!result.find(el => el.id ==filterId[i].id))
result.push(filterId[i]);
console.log({name, subname, value: result});
// this.$store.dispatch('table/updateFilter', { name: name, subname: subname, value: result});
}
}
changeArray(0 ,2, [{id:{id:444}}, { id: {id: 333}}, { id: {id: 222}}]);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости