Javascript 如何在reactJs中删除对象数组中的重复项?

Javascript 如何在reactJs中删除对象数组中的重复项?,javascript,jquery,html,reactjs,Javascript,Jquery,Html,Reactjs,我在用Reactjs单击按钮的同时按下对象。最初我有三种类型的对象,比如“本地”、“全局”和“主”。我在onclock回调中将这些名称作为参数传递。如何避免使用reactJs插入重复项 我的渲染代码 <div> <input type="checkbox" onClick={this.checkedIn.bind(this, "LOCAL", "12")} /> <button type="checkbox" onClick={this.checkedI

我在用Reactjs单击按钮的同时按下对象。最初我有三种类型的对象,比如“本地”、“全局”和“主”。我在onclock回调中将这些名称作为参数传递。如何避免使用reactJs插入重复项

我的渲染代码

<div>
   <input type="checkbox" onClick={this.checkedIn.bind(this, "LOCAL", "12")} />
   <button type="checkbox" onClick={this.checkedIn.bind(this, "GLOBAL", "15")} />
   <button type="checkbox" onClick={this.checkedIn.bind(this, "MAIN", "11")} />
  <button type="checkbox" onClick={this.checkedIn.bind(this, "MAIN", "13")} />
</div>
预期产量

[
  {
    "type":"LOCAL",
    "value":[12]
  },
  {
    "type":"GLOBAL",
    "value":[15]
  },
  {
    "type":"MAIN",
    "value":[11, 13]
  }
]

问题是您正在为每个单击事件推送值。相反,首先查找数组并使用
type
找到必要的对象,然后将值推送到该对象的值数组中

var o=objectVale.find(函数(x){
返回x.type==type;
})
如果(o){
o、 value=o.value | |[];
o、 value.push(value);
}否则{
推({
类型:类型,
值:[值]
})
}

问题是您正在为每个单击事件推送值。相反,首先查找数组并使用
type
找到必要的对象,然后将值推送到该对象的值数组中

var o=objectVale.find(函数(x){
返回x.type==type;
})
如果(o){
o、 value=o.value | |[];
o、 value.push(value);
}否则{
推({
类型:类型,
值:[值]
})
}

您可以尝试以下方法:

var objectVale = [];
checkedIn(type, value) {

    var index = objectValue.findIndex(function(obj){ return obj.type === type; });
    if(index === -1){ // Object with the specific type not found.
        objectValue.push({
            type:type,
            value:[value]
        })
    } else { // Object with the specific type found. So push only the value.
        objectValue[index].value.push(value)
    }
}

您可以尝试以下方法:

var objectVale = [];
checkedIn(type, value) {

    var index = objectValue.findIndex(function(obj){ return obj.type === type; });
    if(index === -1){ // Object with the specific type not found.
        objectValue.push({
            type:type,
            value:[value]
        })
    } else { // Object with the specific type found. So push only the value.
        objectValue[index].value.push(value)
    }
}

我还建议使用
。查找
。这样您就不必使用索引获取对象了。@Rajesh我认为这两种方法都是有效的。另外,如果我取消选中该复选框,则应删除未选中的复选框。我试过这样做,var mainValues=[];mainValues.push(值);var sameValueIndex=mainValues.indexOf(值);主值。拼接(sameValueIndex,1);但是它没有给出正确的结果,所以我建议使用
.find
。这样您就不必使用索引获取对象了。@Rajesh我认为这两种方法都是有效的。另外,如果我取消选中该复选框,则应删除未选中的复选框。我试过这样做,var mainValues=[];mainValues.push(值);var sameValueIndex=mainValues.indexOf(值);主值。拼接(sameValueIndex,1);但它并没有给出正确的结果