_.uniq和_.groupBy函数下划线库

时间:2018-03-10 18:54:59

标签: underscore.js

我在工作期间遇到了下划线图书馆。我想使用_.uniq_.groupBy函数。有人可以解释这些是如何工作的吗?

我试图基于1个属性从对象数组中删除重复,但它不起作用。

例如:

array = [{'name': 'a', 'age': 18}, '{'name': 'a', 'age': 18}']

我用过:

uniq_arr =_.uniq(array, 'age') 

- >想要根据“年龄”采取独特的对象。 ---> 不起作用

然后想根据“名字”对它们进行分组。     group_arr = _.groupBy(uniq_arr,'name')。
--->的 “曾为”

我的疑问/怀疑是:

  1. groupby对我很好,但uniq无效。所以任何人都可以使用uniq来解释如何获得我的预期结果?

  2. 如果我想使用嵌套的groupBy,我应该怎么写呢?我的意思是语法。

  3. 此外,这将是一个很大的帮助,如果有人可以指导我从中可以详细了解这些功能的适当资源。

1 个答案:

答案 0 :(得分:1)

你的问题根本不是关于angularjs的,它完全是关于下划线库的。

就个人而言,我相信groupByuniq的文档很好地解释了这些功能。

  

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]}

以下代码段解释了示例的结果:

&#13;
&#13;
_.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;
&#13;
&#13;

关于&#34;嵌套groupBy&#34;的问题,如果您只想连续两次分组,那么您可以这样做:

&#13;
&#13;
<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;
&#13;
&#13;

旁注:我建议从underscore切换到lodash。 请参阅differences-between-lodash-and-underscore