19.10.2023, 15:31
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Фильтр массива
Привет Массив
fromStorage =[{
"day": "2",
"month": "9"
}, {
"day": "9",
"month": "9"
}, {
"day": "16",
"month": "9"
}, {
"day": "5",
"month": "10"
}, {
"day": "12",
"month": "10"
}, {
"day": "19",
"month": "10"
}]
Я кликаю по элементу, который имеет соответствующие дата атрибуты. Мне нужно удалить соответствующий объект из массива.
...
<div data-day="16" data-month="9">16</div>
...
Если я делаю так
let filtered = fromStorage.filter(o => {
return (o.day !== e.dataset.day && o.month == e.dataset.month)
});
то у меня в массиве остаётся только два объекта. Так как удаляется тот, который я кликнул и те у которых не тот месяц. Как правильно сделать?
|
|
19.10.2023, 15:48
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,748
|
|
let filtered = fromStorage.filter(o => {
return !(o.day === e.dataset.day && o.month === e.dataset.month)
});
|
|
19.10.2023, 15:53
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.
|
|
19.10.2023, 15:57
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Всё, нашёл)
let filtered = fromStorage.filter(o => {
return (o.day !== e.dataset.day && e.dataset.month)
});
|
|
19.10.2023, 16:08
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,748
|
|
Сообщение от ureech
|
Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.
|
Так удалится только тот, по которому кликнули
Сообщение от ureech
|
let filtered = fromStorage.filter(o => {
return (o.day !== e.dataset.day && e.dataset.month)
});
|
А так удалятся все у которых day совпадает, не обращая внимания какой там month
Буде еще один элемент
{
"day": "16",
"month": "10"
},
и он тоже удалится.
|
|
19.10.2023, 16:19
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Ну не знаю). У меня работает так, как я написал.
|
|
19.10.2023, 16:55
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,748
|
|
Сообщение от ureech
|
У меня работает так, как я написал.
|
Упрямство не есть хорошо
<body>
<div data-day="16" data-month="9">16</div>
<script>
const fromStorage =[{
"day": "2",
"month": "9"
}, {
"day": "9",
"month": "9"
}, {
"day": "16",
"month": "9"
}, {
"day": "5",
"month": "10"
}, {
"day": "12",
"month": "10"
}, {
"day": "16",
"month": "10"
}, {
"day": "19",
"month": "10"
}];
const e = document.querySelector('div');
e.addEventListener('click', () => {
console.log(fromStorage.length);
let filtered = fromStorage.filter(o => {
return (o.day !== e.dataset.day && e.dataset.month);
});
console.log(filtered)
})
</script>
</body>
Сколько элементов удалилось?
|
|
19.10.2023, 16:58
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,748
|
|
А так удаляется только тот, что нужен
<body>
<div data-day="16" data-month="9">16</div>
<script>
const fromStorage =[{
"day": "2",
"month": "9"
}, {
"day": "9",
"month": "9"
}, {
"day": "16",
"month": "9"
}, {
"day": "5",
"month": "10"
}, {
"day": "12",
"month": "10"
}, {
"day": "16",
"month": "10"
}, {
"day": "19",
"month": "10"
}];
const e = document.querySelector('div');
e.addEventListener('click', () => {
console.log(fromStorage.length);
let filtered = fromStorage.filter(o => {
return !(o.day === e.dataset.day && o.month === e.dataset.month)
});
console.log(filtered)
})
</script>
</body>
|
|
27.10.2023, 16:04
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
const index = fromStorage.findIndex((o) => {
return o.day === e.dataset.day && o.month === e.dataset.month;
});
fromStorage.splice(index, 1);
console.log(fromStorage);
Но мутации - это плохо.
|
|
|
|