使用lodash获取uniq嵌套对象数组

时间:2017-05-18 10:17:15

标签: javascript lodash

我的数据有嵌套的数组对象。我想使输出中的嵌套对象属于唯一的。 Currenly我正在使用上面的lodash v4,我找到了一个合适的解决方案,但只适用于lodash v3。

数据

[{
   menu: { id: 1 },
   other: { data: "another1" }
},
{
   menu: { id: 2 },
   other: { data: "another2" }
},
{
   menu: { id: 1 },
   other: { data: "another1" }
}]

预期输出

[{
   menu: { id: 1 },
   other: { data: "another1" }
},
{
   menu: { id: 2 },
   other: { data: "another2" }
}]

类似的lodash v3解决方案是here。 v4的解决方案是什么?只要代码运行得更快更简单,没有lodash的解决方案仍然可以接受。

3 个答案:

答案 0 :(得分:1)

您可以使用以下uniq方法。



var arr = [{
  menu: {
    id: 1
  }
}, {
  menu: {
    id: 2
  }
}, {
  menu: {
    id: 1
  }
}];

var unique = _.uniq(arr, 'menu.id');
console.log(unique);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
&#13;
&#13;
&#13;

使用lodash 4.x.x,使用uniqBy

&#13;
&#13;
var arr = [{
  menu: {
    id: 1
  },
  other: {
    data: "another1"
  }
}, {
  menu: {
    id: 2
  },
  other: {
    data: "another2"
  }
}, {
  menu: {
    id: 1
  },
  other: {
    data: "another1"
  }
}];

console.log(_.uniqBy(arr, 'menu.id'));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

没有lodash。使用Array#reduce

var a =[{
   menu: { id: 1 },
   other: { data: "another1" }
},
{
   menu: { id: 2 },
   other: { data: "another2" }
},
{
   menu: { id: 1 },
   other: { data: "another1" }
}]

var res =[];
 var fin =a.reduce((a,b)=> {
if(!res.includes(b.menu.id)){
res.push(b.menu.id)
a.push(b)
}
return a;
},[])
console.log(fin)

答案 2 :(得分:0)

也许

_.uniqBy(yourarray, e=>e.menu.id)

&#13;
&#13;
var data = [{
   menu: { id: 1 },
   other: { data: "another1" }
},
{
   menu: { id: 2 },
   other: { data: "another2" }
},
{
   menu: { id: 1 },
   other: { data: "another1" }
}]

console.log(_.uniqBy(data, e=>e.menu.id));
&#13;
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;