从React JS中的对象中删除键值

时间:2019-06-17 11:11:52

标签: javascript arrays json reactjs

我有一个处于状态的对象,

this.state = {
   selectedValue: {}
}

现在,在这里,我通过以下方式向该对象添加属性

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

现在,在其他部分中,我必须删除具有匹配的resumeId的属性。

还是我需要创建一个array of objects?我在这里有点困惑。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

最好的方法是在您的resumId上添加前缀:

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

现在,您可以使用一种方法来识别您的resumeId。然后遍历您的selectedType状态并删除resumeId。您可以按照以下步骤进行操作:

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

答案 1 :(得分:0)

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

您可以从对象iself中删除resumeId。

答案 2 :(得分:0)

使用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);