#javascript #arrays #reactjs #setstate
#javascript #массивы #reactjs #setstate
Вопрос:
Приведенный ниже код, который я использую для добавления данных в состояние, код
this.setState((state) => ({
...state,
frequency: {
...state.frequency,
days: [...state.frequency.days, parseInt(val)],
},
}));
мое состояние приведено ниже
this.state = {
frequency: {
days: [],
},}
я добавляю числовое значение от 1 до 30, но когда я пытаюсь добавить то же число, которое оно добавляет в массив, я не должен добавлять его снова
, пожалуйста, дайте мне решение
Ответ №1:
перед обновлением состояния выполните оценку, например, затем назначьте дни
let tempDays = this.state.frequency.days.includes(parseInt(val)) ? [...this.state.frequency.days] : [...this.state.frequency.days, parseInt(val)]
this.setState((state) => ({
...state,
frequency: {
...state.frequency,
days: tempDays ,
},
}));
для удаления
let tempDays = this.state.frequency.days.filter( day => day !== parseInt(val))
this.setState((state) => ({
...state,
frequency: {
...state.frequency,
days: [...tempDays] ,
},
}));
Комментарии:
1. И я должен удалить число, используя функцию удаления? это возможно, верно? я перечисляю каждое число с помощью кнопки удаления.. когда я нажимаю удалить, я должен удалить данные из массива..
Ответ №2:
Вы можете проверить, существует ли значение уже в массиве или нет, если оно есть, не обновлять состояние, вот так просто!
const numVal = parseInt(val);
if (this.state.frequency.days.indexOf(numVal) > -1) {
return;
}
this.setState((state) => ({
...state,
frequency: {
...state.frequency,
days: [...state.frequency.days, numVal],
},
}));
Комментарии:
1. И я должен удалить число, используя функцию удаления? это возможно, верно? я перечисляю каждое число с помощью кнопки удаления.. когда я нажимаю удалить, я должен удалить данные из массива..
2. Вы можете использовать функцию фильтра для создания нового массива без какого-либо числа и состояния обновления.
Ответ №3:
во-первых, вы можете проверить массив с помощью include метода array, а затем передать данные в массив. пример
var x = [1,2,3,4,5,6]
if(!x.include(your_number)){
x.push(your_number)
}
Ответ №4:
И я должен удалить число, используя функцию удаления? это возможно, верно?
я перечисляю каждое число с помощью кнопки удаления.. когда я нажимаю удалить, я должен удалить данные из массива..