Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.10.2023, 15:31
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

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

то у меня в массиве остаётся только два объекта. Так как удаляется тот, который я кликнул и те у которых не тот месяц. Как правильно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2023, 15:48
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

let filtered = fromStorage.filter(o => {
            return !(o.day === e.dataset.day && o.month === e.dataset.month)
          });
Ответить с цитированием
  #3 (permalink)  
Старый 19.10.2023, 15:53
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2023, 15:57
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Всё, нашёл)
let filtered = fromStorage.filter(o => {
            return (o.day !== e.dataset.day && e.dataset.month)
          });
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2023, 16:08
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от ureech
Да нет. Так вообще остаётся только тот по которому кликнул. А надо наобород его исключить.
Так удалится только тот, по которому кликнули
Сообщение от ureech
let filtered = fromStorage.filter(o => {
            return (o.day !== e.dataset.day && e.dataset.month)
          });
А так удалятся все у которых day совпадает, не обращая внимания какой там month
Буде еще один элемент
{
    "day": "16",
    "month": "10"
},
и он тоже удалится.
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2023, 16:19
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Ну не знаю). У меня работает так, как я написал.
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2023, 16:55
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

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

Сколько элементов удалилось?
Ответить с цитированием
  #8 (permalink)  
Старый 19.10.2023, 16:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

А так удаляется только тот, что нужен
<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>
Ответить с цитированием
  #9 (permalink)  
Старый 27.10.2023, 16:04
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 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);


Но мутации - это плохо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать фильтр Андрей812 Работа 8 10.09.2018 15:42
Обход многомерного массива с задержкой после каждого цикла Walk Общие вопросы Javascript 2 14.08.2017 16:17
Фильтр массива Sav2907 Элементы интерфейса 38 06.01.2017 11:17
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Фильтр таблицы. Как удалить элемент из массива? leshiple Общие вопросы Javascript 29 13.12.2014 11:19