как добавить и удалить число без дублирования в объекте состояния внутри массива в Reactjs?

#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:

И я должен удалить число, используя функцию удаления? это возможно, верно?

я перечисляю каждое число с помощью кнопки удаления.. когда я нажимаю удалить, я должен удалить данные из массива..