我正在尝试获取 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/