Удалить значение ключа из объекта в реагировать JS - PullRequest
0 голосов
/ 17 июня 2019

У меня есть объект в состоянии,

this.state = {
   selectedValue: {}
}

Теперь, я добавляю свойство к этому объекту следующим образом

if (e.currentTarget.checked) {
      this.setState({
        selectedType: {
          ...this.state.selectedType,
          [resumeId]: type
        }
      })

Теперь, в другой части, я должен удалить свойство с соответствующим resumeId.

Или мне нужно создать array of objects? Я немного запутался здесь.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 3 ]

0 голосов
/ 17 июня 2019

if (e.currentTarget.checked) {
      this.setState({
        selectedType: {
          ...this.state.selectedType,
          [resumeId]: type
        }
      }) else {
        const selectedType = {
          ...this.state.selectedType
        }
        delete selectedType[resumeId];
        this.setState({
          selectedType
        });
      }

Вы можете удалить resumeId из объекта iself.

0 голосов
/ 17 июня 2019

Используйте Object destructuring, чтобы добиться этого чисто:

if (e.currentTarget.checked) {
      this.setState({
        selectedType: {
          ...this.state.selectedType,
          [resumeId]: type
        }
      })
} else {
    // Destructure the resumeId and rest properties
    const { resumeId, ...rest} = this.setState.selectedType;

    // Only assign the rest properties now
    this.setState({ selectedType: ...rest });
}

Обновление:

Чтобы проверить, все ли значения одинаковы:

const data = { "a": "11", "b": "11", "c":"12", "d" : "11" };

const objectValues = Object.values(data);

// Check first value with every value
const isEveryValueSame = objectValues.every(x => x === objectValues[0]);

console.log(isEveryValueSame);
0 голосов
/ 17 июня 2019

Лучший способ сделать это - добавить префикс к вашему resumId:

if (e.currentTarget.checked) {
      this.setState({
        selectedType: {
          ...this.state.selectedType,
          [`resume-${resumeId}`]: type
        }
      })

Теперь у вас есть способ идентифицировать свой резюме. Затем переберите ваше состояние selectedType и удалите resumeId. Вы можете сделать это следующим образом:

let selectedType = this.state.selectedType;
for (let key in selectedType) {
  if (key.indexOf('resume') !== -1) {
    delete selectedType[key]
  }
}
this.setState({selectedType})
...