我在工作期间遇到了下划线图书馆。我想使用_.uniq
和_.groupBy
函数。有人可以解释这些是如何工作的吗?
我试图基于1个属性从对象数组中删除重复,但它不起作用。
例如:
array = [{'name': 'a', 'age': 18}, '{'name': 'a', 'age': 18}']
我用过:
uniq_arr =_.uniq(array, 'age')
- >想要根据“年龄”采取独特的对象。 ---> 不起作用
然后想根据“名字”对它们进行分组。
group_arr = _.groupBy(uniq_arr,'name')。
--->的 “曾为”
我的疑问/怀疑是:
groupby
对我很好,但uniq
无效。所以任何人都可以使用uniq
来解释如何获得我的预期结果?
如果我想使用嵌套的groupBy
,我应该怎么写呢?我的意思是语法。
此外,这将是一个很大的帮助,如果有人可以指导我从中可以详细了解这些功能的适当资源。
答案 0 :(得分:1)
你的问题根本不是关于angularjs的,它完全是关于下划线库的。
就个人而言,我相信groupBy和uniq的文档很好地解释了这些功能。
groupBy _.groupBy(list,iteratee,[context])
将集合拆分为集合,按照通过iteratee运行每个值的结果进行分组。如果iteratee是一个字符串而不是一个函数,则按每个值的iteratee命名的属性进行分组。
#include <vector> static const char* sAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; std::vector<char> vAlphabet(sAlphabet, sAlphabet+26);
uniq _.uniq(array,[isSorted],[iteratee])别名:unique
使用===生成数组的无副本版本,以测试对象相等性。特别是仅保留每个值的第一次出现。如果您事先知道数组已排序,则为isSorted传递true将运行更快的算法。如果要根据转换计算唯一项,请传递iteratee函数。
_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); }); => {1: [1.3], 2: [2.1, 2.4]}
以下代码段解释了示例的结果:
_.uniq([1, 2, 1, 4, 1, 3]);
=> [1, 2, 4, 3]
&#13;
console.log("Test data:");
var array = [
{'name': 'a', 'age': 18},
{'name': 'a', 'age': 18},
{'name': 'a', 'age': 19},
{'name': 'a', 'age': 20},
{'name': 'c', 'age': 19},
];
console.log(array);
console.log("_.uniq(array, 'age') -> Removes elements to only hold one of each age (names will be ignored entirely):");
var uniq_arr =_.uniq(array, 'age');
console.log(uniq_arr);
console.log("_.groupBy(array, 'name') -> Creates a dictionary where each name holds an array of all elements that match that name:");
var group_arr = _.groupBy(array, 'name');
console.log(group_arr);
&#13;
关于&#34;嵌套groupBy&#34;的问题,如果您只想连续两次分组,那么您可以这样做:
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
&#13;
var array = [
{'name': 'a', 'age': 18},
{'name': 'a', 'age': 18},
{'name': 'a', 'age': 19},
{'name': 'a', 'age': 20},
{'name': 'c', 'age': 19},
];
var group_arr = _.groupBy(array, 'name');
for (var key in group_arr) {
group_arr[key] = _.groupBy(group_arr[key], 'age');
}
console.log(group_arr);
&#13;
旁注:我建议从underscore切换到lodash。 请参阅differences-between-lodash-and-underscore。