Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Фильтр массива (https://javascript.ru/forum/dom-window/85554-filtr-massiva.html)

ureech 19.10.2023 15:31

Фильтр массива
 
Привет Массив
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)
          });

то у меня в массиве остаётся только два объекта. Так как удаляется тот, который я кликнул и те у которых не тот месяц. Как правильно сделать?

voraa 19.10.2023 15:48

let filtered = fromStorage.filter(o => {
            return !(o.day === e.dataset.day && o.month === e.dataset.month)
          });

ureech 19.10.2023 15:53

Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.

ureech 19.10.2023 15:57

Всё, нашёл)
let filtered = fromStorage.filter(o => {
            return (o.day !== e.dataset.day && e.dataset.month)
          });

voraa 19.10.2023 16:08

Цитата:

Сообщение от ureech
Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.

Так удалится только тот, по которому кликнули
Цитата:

Сообщение от ureech
let filtered = fromStorage.filter(o => {
            return (o.day !== e.dataset.day && e.dataset.month)
          });

А так удалятся все у которых day совпадает, не обращая внимания какой там month
Буде еще один элемент
{
    "day": "16",
    "month": "10"
},
и он тоже удалится.

ureech 19.10.2023 16:19

Ну не знаю). У меня работает так, как я написал.

voraa 19.10.2023 16:55

Цитата:

Сообщение от 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>

Сколько элементов удалилось?

voraa 19.10.2023 16:58

А так удаляется только тот, что нужен
<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>

ruslan_mart 27.10.2023 16:04

const index = fromStorage.findIndex((o) => {
  return o.day === e.dataset.day && o.month === e.dataset.month;
});

fromStorage.splice(index, 1);

console.log(fromStorage);


Но мутации - это плохо.


Часовой пояс GMT +3, время: 09:09.