在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
混淆吗?
答案 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) }; })