关于javascript:如何在复杂数组中查找唯一项(具有嵌套对象)

How to find unique items (with nested objects) in a complex array

本问题已经有最佳答案,请猛点这里访问。

我不是在寻找简单数组的答案,但是当我有嵌套的对象级别数组时,我面临着一个问题。

到目前为止,我已经看到了简单数组的类似答案,但没有看到复杂嵌套数组的类似答案。

下面是我的复制数组,它有项目和对象的子级别,我想匹配文件对象名,并基于此查找复制。

我试图应用下面的函数,但它不适用于我。请告诉我如何将下面的函数修改为我的数组?

1
2
3
4
5
6
7
8
9
10
11
12
var myArr = [
  {file: {name:"sakthi1.jpg"}, checked: true},
  {file: {name:"sakthi2.jpg"}, checked: true},
  {file: {name:"sakthi2.jpg"}, checked: true},
  {file: {name:"sakthi2.jpg"}, checked: true}
];

function removeDuplicates(myArr, prop) {
  return myArr.filter((obj, pos, arr) => {
    return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
  });
}


我认为你可以在javascript中使用map。遍历数组,将唯一元素(在您的案例名称中)存储在映射中。并检查它是否存在于映射中,如果存在,则从当前索引中移除元素。否则把"名字"放在地图上。

1
2
3
4
5
6
7
8
9
10
11
12
13
let myArr = [{file: {name:"sakthi1.jpg"}, checked: true}, {file: {name:"sakthi2.jpg"}, checked: true}, {file: {name:"sakthi2.jpg"}, checked: true}, {file: {name:"sakthi2.jpg"}, checked: true}];
let mapOfUniqueElements = new Map();

    function removeDuplicates(myArr, prop) {
        $.each(myArr,function(k,v){
          let name  = v['file']['name'];
          if(mapOfUniqueElements.get(name)){
            //remove the element from array
          }else{
            mapOfUniqueElements.set(name, 'present');
          }
        })
    };