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

时间:2017-10-23 12:55:15

标签: javascript arrays

我不是在寻找简单数组的答案,但是当我有嵌套的对象数组时我遇到了问题。

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

下面是我的重复数组,它有子级别的项目和对象,我想匹配文件对象名称,并根据它找到重复项。

我尝试应用以下功能但是,它对我不起作用。请告诉我如何将以下函数修改为我的数组?

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;
  });
}

1 个答案:

答案 0 :(得分:1)

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

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');
          }
        })
    };