2015-12-09 3 views
1

В JS у меня есть словарь. Словарь индексировано по id Каждый элемент в словаре имеет вид:Underscore.js. Почему этот код не создает дубликаты?

{ name: aName, type: aType } 

Подмножество элементов дублируются name поля. Я хочу извлечь элементы с дублирующимися полями name.

Вот мой подход с использованием underscore.js, что является не рабочий:

Включите словарь в массив, добавив идентификатор ключа в качестве дополнительного поля к элементу, вставленной в массиве:

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

ниже код будет печатать элементы, которые дублируются имя

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) }; }) 
+0

Nice. Спасибо за это. Супер полезно. – dugla

Смежные вопросы