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)
假设您的所有对象都是不同类型(不同属性)的,并且本质上并不复杂,即不是嵌套对象

  • 创建数组列表(用作多维数组)

    设uniqueArr=[]

  • 使用Arr.forEach()遍历包含重复项的数组

  • 获取对象的属性

    Object.getPropertyNames(项)

  • 检查uniqueArr中是否已存在此类型的对象类型,如果不存在,请添加属性类型

    uniqueArr.push({property:[]})

  • 如果uniqueArr中已存在该属性,请检查uniqueArr中的属性数组中是否存在当前属性值

  • 如果属性不存在,请将新属性添加到相应的属性数组。如果属性退出,请跳过并运行下一个对象的循环

  • 循环完成后,在uniqueArr的帮助下创建resultArr

    样本唯一性 [ {a:[1,2]}, {b:[1]}, {c:[3]} ]


  • 假设您的所有对象都是不同类型(不同属性)的对象,并且本质上并不复杂,即不是嵌套对象

  • 创建数组列表(用作多维数组)

    设uniqueArr=[]

  • 使用
    Arr.forEach()遍历包含重复项的数组

  • 使用获取对象的属性

    Object.getPropertyNames(项目)

  • 检查uniqueArr中是否已存在此类型的对象类型,如果不存在,请添加属性类型
  • uniqueArr.push({property:[]})

  • 如果uniqueArr中已存在该属性,请检查uniqueArr中的属性数组中是否存在当前属性值
  • 如果属性不存在,请将新属性添加到相应的属性数组。如果属性退出,请跳过并运行下一个对象的循环
  • 循环完成后,在 独一无二的

  • 示例:
    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);