В 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
?
Nice. Спасибо за это. Супер полезно. – dugla