Мне часто приходится проверять, является ли элемент частью массива. Если да, то я бы хотел его удалить. Если нет, то его следует добавить. По сути, это переключение существования данного элемента в массиве.
const onDateSelected = function (date) {
const inArray = selectedDates.value.find((d) => d === date) !== undefined;
if (inArray) {
selectedDates = selectedDates.filter((d) => d !== date);
} else {
selectedDates.push(date);
}
};
Есть ли более короткий/быстрый способ сделать это?
Если вы собираетесь часто использовать это, то сделайте это функцией или расширением массива (большинство людей не рекомендуют этого делать), тогда вы можете сделать что-то вроде toggleArrayItem(selectedDate, date), что, вероятно, будет самым коротким из возможных вариантов. Фактическая реализация тогда не обязательно должна быть «короткой» — да, эффективной, но символы кода не будут иметь значения, поскольку вы пишете его только один раз.
@fdomn-m да, я бы рекомендовал это сделать. Сделайте это функцией. Сделанный. Тогда вам не придется иметь дело с последствиями изменения встроенных модулей.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете попробовать это:
const onDateSelected = function(date) {
const index = selectedDates.indexOf(date);
index !== -1 ? selectedDates.splice(index, 1) : selectedDates.push(date);
};
Использование набора значительно упрощает задачу, используя имеет , удалить и добавить:
const data = new Set([ 'foo', 'bar', 'foobar' ]);
const removeOrAdd = 'bar';
if (data.has(removeOrAdd)) {
data.delete(removeOrAdd)
} else {
data.add(removeOrAdd)
}
console.info([...data]);Если вам действительно нужен массив, рассмотрите возможность использования indexOf в сочетании с splice
const data = [ 'foo', 'bar', 'foobar' ];
const removeOrAdd = 'bar';
const possibleIndex = data.indexOf(removeOrAdd);
if (possibleIndex > -1) {
data.splice(possibleIndex, 1);
} else {
data.push(removeOrAdd);
}
console.info(data);Верно, но поскольку оп использует find((d) => d === date), я предполагаю, что он использует необъектные массивы.
Да, каким-то образом я прочитал вопрос три раза и каждый раз читал это как поиск объекта :/ Я бы винил в этом жару. Set здесь имеет смысл.
Привет! Это обязательно должен быть массив или может быть набор ? Наборы гораздо лучше подходят для тех операций, которые вам нужны.