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

标签 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"}
]

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

var t = 
[
  {"id":1,"name":"a"},
  {"id":2,"name":"c"}
]

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

最佳答案

最近

_.uniqBy is now preferable

Full working example here

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);
<小时/>

遗产

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

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

您的代码将如下所示,以通过 id 获取唯一的主题

var t = _.uniq(tst, 'topicId');

编辑

我做了一个jsfiddle

http://jsfiddle.net/q5HNw/

更新

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

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

关于javascript - 如何将具有重复值的数组映射到 Javascript 中的唯一数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414427/

相关文章:

javascript - 如何转换值表以将其集成到 http.get 中

php - 用 JavaScript 编写的 Cookie 在 PHP 中仅显示为整数

javascript - 对对象进行排序,使最大的嵌套数组排在前面

javascript - 如何找到 JavaScript 对象之间的公共(public)属性

node.js 错误 : Cannot find module 'lodash.assign'

javascript - 从自己的域获取 api 时发生 CORS 错误

javascript - 动态 jQuery 无冲突

javascript - 使用 reduceRight 返回有条件的工作日

angular - Visual Studio/Angular - 类型参数不可分配给参数类型 ObjectIterateeCustom<any[], boolean>

javascript - 在聚合物 3 的 ag-grid 中进行动态单元渲染