Underscore.js。为什么这段代码不会产生重复?

时间:2015-12-09 17:05:43

标签: javascript underscore.js

在JS中,我有一本字典。字典由id键入。字典中的每个项目的格式为:

{ name: aName, type: aType }

项目的子集具有重复的name字段。我想提取带有重复name字段的项目。

以下是我使用工作的underscore.js的方法:

通过将id键作为附加字段添加到数组中插入的项目,将字典转换为数组:

var acc = [],
    sorted,
    uniques,
    dupes;

    _.each(name_type_dictionary, function(name_type, id){
        acc.push({ name: name_type.name, type: name_type.type, id: id });
    });

排序acc

sorted = _.sortBy(acc, 'name');

sorted的检查表明存在重复。让我们去吧。首先抓住所有独特的。我使用iteratee来指定唯一性标准。

    uniques = _.uniq(sorted, true, function(name_type_id) {
        return name_type_id.name;
    });

抓住重复项:

dupes = _.difference(sorted, uniques);

dupe排序为按字母顺序排列。

dupes_sorted = _.sortBy(dupes, 'name');

这似乎不起作用。我盯着dupes_sorted并且找不到任何重复项。注意:某些名称字段中包含逗号和/或括号。这会让_.sort_.uniq混淆吗?

1 个答案:

答案 0 :(得分:1)

下面的

代码将打印具有重复名称的元素

 a = [{ name: 'Damian', age: 1}, {name: 'Ania', age: 1}, {name: 'Damian', age: 2}, {name: 'Joanna', age: 4}] 

 grouped = _.groupBy(a, 'name')

 _.each(grouped, function(elements, name) { if(elements.length > 1) { console.log(elements) }; })