如何从数组中查找唯一对象

时间:2015-04-05 14:01:18

标签: javascript underscore.js

我有一个像

这样的数组对象
var array = 

[
    {"name":"Joe", "age":17},
    {"name":"Carl", "age": 35},
    {"name":"Joe", "age":17},
    {"name":"Carl", "age":35},
    {"name":"Mark", "age":21},
]

什么是从这个数组中获取唯一对象而不进行循环的最佳方法,在这种情况下输出需要

[
    {"name":"Joe", "age":17},
    {"name":"Carl", "age": 35},
    {"name":"Mark", "age":21}
]

3 个答案:

答案 0 :(得分:3)

new Array(...new Map(a.map(d=> [d.name, {name: d.name, age: d.age}]))).map(d=> d[1]);
  1. a.map(d => [d.name,{name:d.name,age:d.age}]:返回数组包含 [姓名,{姓名:abc,年龄:10}]
  2. 新地图(a.map(d => [d.name,{name:d.name,age:d.age}]))保存唯一 值
  3. new Array(... new map(a.map(d => [d.name,{name:d.name,age: d.age}]))):将地图转换为数组
  4. new Array(... new map(a.map(d => [d.name,{name:d.name,age: d.age}])))。map(d => d [1]):从数组中只取secon elemnt的意思 {name:d.name,age:d.age} only

答案 1 :(得分:2)

尝试使用lodash库和uniq方法:这也可以使用下划线。

https://lodash.com/docs#uniq

_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// → [{ 'x': 1 }, { 'x': 2 }]

答案 2 :(得分:1)

使用开源项目jinqJs非常简单。

var array = 
[
    {"name":"Joe", "age":17},
    {"name":"Carl", "age": 35},
    {"name":"Joe", "age":17},
    {"name":"Carl", "age":35},
    {"name":"Mark", "age":21},
];
  

  var result = jinqJs().from(array).distinct('name', 'age').select();
  document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>