Javascript 如何删除数组中具有相同键和值对的对象
我已经研究了许多堆栈溢出问题,但似乎没有一个完全回答我的问题。我有一个对象数组,我想通过删除键和值相同的所有对象来减少这个数组 因此,我的对象数组将是:Javascript 如何删除数组中具有相同键和值对的对象,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,我已经研究了许多堆栈溢出问题,但似乎没有一个完全回答我的问题。我有一个对象数组,我想通过删除键和值相同的所有对象来减少这个数组 因此,我的对象数组将是: [{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}] 最终结果应该是: [{a:1},{a:2},{c:3},{b:1},{c:4}] 我尝试过使用filer和map,但我只能获取数组中的第一个对象,而不是数组中具有不同键/值对的所有对象。我也尝试过使用filter和findIndex,但遇到了
[{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}]
最终结果应该是:
[{a:1},{a:2},{c:3},{b:1},{c:4}]
我尝试过使用filer和map,但我只能获取数组中的第一个对象,而不是数组中具有不同键/值对的所有对象。我也尝试过使用filter和findIndex,但遇到了同样的问题
在将对象推入数组之前,我也无法过滤它们
有人能给我指一下正确的方向吗?你可以用。然后,我们使用添加到一个新数组,如果它在数组中,我们不会添加它,否则我们会添加它
const数组=[{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}]
let unique=array.reduce((res,itm)=>{
//测试项目是否已在新数组中
让result=res.find(item=>JSON.stringify(item)==JSON.stringify(itm))
//如果没有,让我们添加它
如果(!result)返回res.concat(itm)
//如果只是归还我们已经拥有的东西
返回res
}, [])
console.log(unique)
假设您的所有对象都是不同类型(不同属性)的,并且本质上并不复杂,即不是嵌套对象
假设您的所有对象都是不同类型(不同属性)的对象,并且本质上并不复杂,即不是嵌套对象
Arr.forEach()遍历包含重复项的数组代码>
Object.getPropertyNames(项目)
uniqueArr.push({property:[]})
示例:
uniqueArr[{a:[1,2]},{b:[1]},{c:[3]}]代码>看起来,所有对象都是唯一的。怎么会这样?在原始数组中,有三个对象都是{a:1},还有两个是{c:3}@Teemu,我也看到了这个,但是使用filter和findIndex的解决方案只返回唯一数组的第一个实例object@flored27,包含相同键和值的对象不相等;只有对同一对象的引用是相等的。这就是为什么{}!=={}
@Teemu看起来接受的答案在将对象放入数组之前过滤对象。但是,我已经有了一个对象数组,并且之前无法对其进行筛选,但思路相同:[…new Set(array.map((item)=>JSON.stringify(item))]
没有想到一个集合!我喜欢它!我真的喜欢这个答案!你能告诉我为什么…新的吗?因为集合
是一个,我们需要创建该类的一个实例。如果你是指…
,那就是
var a = [{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}];
var newData = [];
a.map(ele=>JSON.stringify(ele)).forEach(ele=>{
if(newData.indexOf(ele) === -1){
newData.push(ele)
}
});
newData.map(ele=>JSON.parse(ele))
console.log(newData);