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