Javascript 如何在阵列中搜索重复的对象?

Javascript 如何在阵列中搜索重复的对象?,javascript,vue.js,ecmascript-6,vuejs2,Javascript,Vue.js,Ecmascript 6,Vuejs2,我有这样的数组结构,希望推送一些不重复的对象 [ { 申请编号:“2”, id:“8cca5572-7dba-49de-971b-c81f77f221de”, 国家:23, 总价:36 }, { 申请编号:“3”, id:“8cca5572-33333-49de-971b-c81f77f221de”, 国家:1, 总价:2 } ]您可以使用ES6Array.findIndex()函数。像这样: let sampleArray=[ { 申请编号:“2”, id:“8cca5572-7dba-4

我有这样的数组结构,希望推送一些不重复的对象

[
{
申请编号:“2”,
id:“8cca5572-7dba-49de-971b-c81f77f221de”,
国家:23,
总价:36
},
{
申请编号:“3”,
id:“8cca5572-33333-49de-971b-c81f77f221de”,
国家:1,
总价:2
}

]
您可以使用ES6
Array.findIndex()
函数。像这样:

let sampleArray=[
{
申请编号:“2”,
id:“8cca5572-7dba-49de-971b-c81f77f221de”,
国家:23,
总价:36
},
{
申请编号:“3”,
id:“8cca5572-33333-49de-971b-c81f77f221de”,
国家:1,
总价:2,
}
];
const updateArr=newData=>
{
const existingIndex=sampleArray.findIndex(obj=>obj.id==newData.id);
如果(现有索引>=0)
sampleArray[existingIndex]={…sampleArray[existingIndex],…newData};
其他的
sampleArray.push(新数据)
}
const newData={id:“8cca5572-33333-49de-971b-c81f77f221de”,国家:67637674634}
updateArr(newData);

console.log(sampleArray)
您可以使用ES6
Array.findIndex()
函数。像这样:

let sampleArray=[
{
申请编号:“2”,
id:“8cca5572-7dba-49de-971b-c81f77f221de”,
国家:23,
总价:36
},
{
申请编号:“3”,
id:“8cca5572-33333-49de-971b-c81f77f221de”,
国家:1,
总价:2,
}
];
const updateArr=newData=>
{
const existingIndex=sampleArray.findIndex(obj=>obj.id==newData.id);
如果(现有索引>=0)
sampleArray[existingIndex]={…sampleArray[existingIndex],…newData};
其他的
sampleArray.push(新数据)
}
const newData={id:“8cca5572-33333-49de-971b-c81f77f221de”,国家:67637674634}
updateArr(newData);

console.log(sampleArray)
尝试创建一个名为
addToArray
的函数,该函数将原始数组和要添加的新对象作为参数,在其中查找该对象已存在的索引,然后覆盖它,否则在末尾推送它:

让arr=[{
id:1,
国家:45
},
{
id:2,
国家:23
},
{
id:3,
国家:75
},
{
id:4,
国家:39
}
]
函数addToArray(ar、val){
让index=ar.findIndex(item=>item.id==val.id);
(索引>=0)?ar[索引]=val:ar.push(val)
}
console.log('before:',arr)
addToArray(arr{
id:2,
国家:86
})

console.log('after:',arr)
尝试创建一个名为
addToArray
的函数,该函数将原始数组和要添加的新对象作为参数,在其中查找该对象的索引,然后覆盖该对象,否则将其推到末尾:

让arr=[{
id:1,
国家:45
},
{
id:2,
国家:23
},
{
id:3,
国家:75
},
{
id:4,
国家:39
}
]
函数addToArray(ar、val){
让index=ar.findIndex(item=>item.id==val.id);
(索引>=0)?ar[索引]=val:ar.push(val)
}
console.log('before:',arr)
addToArray(arr{
id:2,
国家:86
})

log('after:',arr)
我在每次更改时都使用一个事件来运行函数,之后使用如下循环

vents.$on('newArr', (newArray) => {
            let i;
            for (i = 0; i < this.exportData.length; i++) {
                let obj = this.exportData[i];
                if (obj.id === newArray.id) {
                    delete this.exportData[i];
                }
            }
            this.exportData.push(newArray);
        });
vents.$on('newArr',(newArray)=>{
让我;
对于(i=0;i

我认为这很简单,如果有人认为这种方法不优化或不好,请告诉我。

我使用事件在每次更改上运行函数,然后使用下面的循环

vents.$on('newArr', (newArray) => {
            let i;
            for (i = 0; i < this.exportData.length; i++) {
                let obj = this.exportData[i];
                if (obj.id === newArray.id) {
                    delete this.exportData[i];
                }
            }
            this.exportData.push(newArray);
        });
vents.$on('newArr',(newArray)=>{
让我;
对于(i=0;i

我认为这是简单明了的,如果有人认为这种方法不好或不好,那就告诉我。

你认为复制是一个精确的匹配,我的意思是,所有的属性?还是只有一个属性?@ MuffMn949不只是检查对象ID'你是否考虑复制一个确切的匹配,我的意思是,所有属性?还是只有一个属性?@manuman94不只检查对象id