如何将具有重复值的数组映射到Javascript中的唯一数组?

21 javascript lodash

我有以下数组:

var tst = 
[
 {"topicId":1,"subTopicId":1,"topicName":"a","subTopicName":"w"},
 {"topicId":1,"subTopicId":2,"topicName":"b","subTopicName":"x"},
 {"topicId":1,"subTopicId":3,"topicName":"c","subTopicName":"y"},
 {"topicId":2,"subTopicId":4,"topicName":"c","subTopicName":"z"}
]
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以将其映射到topicId> id和topicName> name的这种数组:

var t = 
[
  {"id":1,"name":"a"},
  {"id":2,"name":"c"}
]
Run Code Online (Sandbox Code Playgroud)

我正在使用现代浏览器,如果有帮助,我也有_lodash.请注意,tst数组中将有大约100行,因此我不需要非常优化的解决方案.简单易维护的解决方案更为重要.

axe*_*uch 33

最近的

_.uniqBy现在更受欢迎

这里有完整的工作示例

var tst = [
 {"topicId":1,"subTopicId":1,"topicName":"a","subTopicName1":"w"},
 {"topicId":2,"subTopicId":2,"topicName":"b","subTopicName2":"x"},
 {"topicId":3,"subTopicId":3,"topicName":"c","subTopicName3":"y"},
 {"topicId":1,"subTopicId":4,"topicName":"c","subTopicName4":"z"}
];

var result = _.map(_.uniqBy(tst, 'topicId'), function (item) {
    return {
        id: item.topicId,
        name: item.topicName
    };  
});

console.log(result);
Run Code Online (Sandbox Code Playgroud)

遗产

http://lodash.com/docs#uniq是一个好的开始

_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
Run Code Online (Sandbox Code Playgroud)

您的代码看起来像是通过id获取唯一的主题

var t = _.uniq(tst, 'topicId');
Run Code Online (Sandbox Code Playgroud)

编辑

我做了一个jsfiddle

http://jsfiddle.net/q5HNw/

UPDATE

删除了不必要的名称唯一性

http://jsfiddle.net/q5HNw/1/

  • 在Lodash> = 4中使用`uniqBy`而不是`uniq` (2认同)