javascript - 如何停止对象数组中的重复数据输入

标签 javascript reactjs

我有一个名为validationValueIdValues的数组,因此当用户单击输入状态时,即。 validationIdValue 获取各个输入框的值。现在,一个用户选择"is"或“否”选项。该函数创建一个 obj,其键名称等于 state,validationIdValue 且值等于用户选择,简而言之,创建一个像这样的 obj

{08765d0f-2e7a-4fbd-9282-c38f5ddf8d8b: "NO"}

然后这个对象被推送到validationValueIdValues变量。现在,当用户选择相同的框并将选择值从“否”更改为"is"时,就会出现问题

  {08765d0f-2e7a-4fbd-9282-c38f5ddf8d8b: "YES"}

然后这个对象被推送到validationValueIdValues变量,而不检查先前带有键的相同对象是否存在,如果存在则从数组中删除该对象。我为此目的使用以下代码,但数组中仍然存在重复的 obj。

  var validationValueIdValues = []  //as global variable

  if (this.state.selectedOption === "YES") {
    const attribute = {};
    attribute[this.state.validationIdValue] = "YES";
    if (validationValueIdValues.length > 0) {
      validationValueIdValues.forEach((data, index) => {
        if (Object.keys(data) == this.state.validationIdValue) {
          validationValueIdValues.splice(index, 1);
            validationValueIdValues.push(attribute);
        }
      });
    } else {
      validationValueIdValues.push(attribute);
    }
  }

我对 this.state.selectedOption === "NO"使用了相同的 if 语句

最佳答案

您需要检查数组中的所有键才能找到匹配的值。正如您提到的,您不需要为"is"或“否”重复代码。像这样的东西足够通用来处理它

const validationValueIdValues = []  //as global variable


const addOrUpdateValidationValues = (newValidationValue) => {
    if(!newValidationValue) {
        return;
    }
    const keyOfNewValue = Object.keys(newValidationValue)[0]
    let added = false
    // loop through all values
    for(const validationValue of validationValueIdValues) {
        const keyOfCurrentValue = Object.keys(validationValue)[0]
        if(keyOfNewValue === keyOfCurrentValue) {
            // found that kind of key then just replace the value 
            added = true
            validationValue[keyOfCurrentValue] = newValidationValue[keyOfNewValue]
        }
    }
    // not added push
    if(!added) {
        validationValueIdValues.push(newValidationValue)
    }

}


// ...
// when you have the select or what ever event
// just call
addOrUpdateValidationValues(this.state.selectedOption)

关于javascript - 如何停止对象数组中的重复数据输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59261906/

相关文章:

reactjs - 在react-redux应用程序中需要什么mapDispatchToProps?

javascript - 动态导入react-icons

javascript - REACTJS 中的警告 : flattenChildren(. ..) : Encountered two children with the same key, `false`

javascript - 更改所选导出的文本输入背景颜色

javascript - 如何在右键单击时更改全日历事件的颜色

javascript - MxGraph - Angularjs 1 - 集成

javascript - React - 动态设置状态,无需硬编码关键字段

javascript - 如何导出多个类方法

javascript - "react-native-fade-in-view"导致 "Cannot read property ' func ' of undefined"错误

javascript - MongoDB - JSON 解析