javascript - 基于带 lodash 下划线的键拆分 jsonarray

标签 javascript jquery underscore.js lodash text-processing

我正在尝试获取 json 数组的每一列中的唯一项。我想转换这个:

var items = [ {"name": "Type 1","id": 13}, {"name": "Type 2","id": 14}, {"name": "Type 3","id": 14}, {"name": "Type 3","id": 13}, {"name": "Type 2","id": 12}, {"name": "Type 3","id": 12} ];

进入

[{"Type 1","Type 2","Type 3"},{12,13,14}]

这是我尝试过的:

var uniq1 = _.map(_.uniqBy(items, 'id'), 'id');
var uniq2 =_.map(_.uniqBy(items, 'name'), 'name')
console.log(uniq1,uniq2)

fiddle :https://jsfiddle.net/yogeshwaran/5ntfzss1/

但这对于我的用例来说似乎是一个低效的解决方案,因为我的真实数据集要大得多(100000 个元素,每个元素有 6 个键)。有没有办法获取每个键的所有唯一值。我不想每次都迭代整个集合。我理想的方法是: 1. 根据键拆分数组。 2.然后在每个分割中找到唯一的。 3.加入结果。

谢谢。

最佳答案

您可以使用组合 _.values() 将对象转换为数组,使用 _.zip() 转置数组,然后将它们映射为 _.uniq():

var items = [
  {"name": "Type 1","id": 13, "position": "manager"},
  {"name": "Type 2","id": 14, "position": "manager"},
  {"name": "Type 3","id": 14, "position": "manager"},
  {"name": "Type 3","id": 13, "position": "worker"},
  {"name": "Type 2","id": 12, "position": "worker"},
  {"name": "Type 3","id": 12, "position": "manager"}
];

var result = _.zip.apply(_, items.map(_.values)).map(_.uniq);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>

关于javascript - 基于带 lodash 下划线的键拆分 jsonarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195661/

相关文章:

带有 While 循环的 Javascript 贷款计算器

javascript - Ember 绑定(bind)到数组元素

javascript - 如何使 jquery 脚本更短?

backbone.js - _.: a confuse with context之后

underscore.js - 下划线平展父/子对象的嵌套数组

javascript - 在同一 Canvas 中顺时针旋转一个轮子,逆时针旋转另一个轮子

javascript - Vuejs 异步请求完成后显示结果

javascript - 在 HTML/CSS/JQuery 中以树模型显示数据

javascript - 如何取消特定字段的选中

javascript - 如何在 lodash/下划线中强制使用 arity?