Попытка решить эту проблему Codwars Kata .
По заданному массиву найти дубликаты в этом массиве и вернуть новый массив этих дубликатов.Элементы возвращаемого массива должны появляться в том порядке, в котором они впервые появились как дубликаты.
Примеры:
[1, 2, 4, 4, 3, 3, 1, 5, 3, '5'] ==> [4, 3, 1]
[0, 1, 2, 3, 4, 5] ==> []
У меня есть:
function duplicates(arr) {
arr.sort((value, index) => value - index);
let duplicates = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
duplicates.unshift(arr[i]);
}
}
//filter out duplicates within "duplicates"
duplicates = duplicates.filter((value, index) =>
duplicates.indexOf(value) == index);
return duplicates;
}
console.log(duplicates([1, 2, 4, 4, 3, 1, 5, '5']));
Это проходит все тесты, кроме одного:
Ожидается: '[1, 4]', вместо этого получено: '[4,1] '
И я не уверен, почему - к сожалению, он не отображает контрольный пример.
Было предложено, однако, еще один способ создать карту частот с помощью Map .Как бы я это сделал?
Я пытался:
function duplicates(arr) {
let map = new Map([arr]);
return map;
}
console.log(duplicates([1, 2, 4, 4, 3, 1, 5, '5']));
, и это не создает частотную карту.
Какие еще предложения вы бы предложили?
ПРИМЕЧАНИЕ - "5" и 5 не должны учитываться как одно и то же значение.
РЕДАКТИРОВАТЬ - Первоначально пытался создать частотную карту следующим образом:
function duplicates(arr) {
let map = {};
arr.forEach((value, index) => {
if (!map[value]) {
map[value] = 0;
}
map[value] += 1;
})
return map;
}
console.log(duplicates([1, 2, 4, 4, 3, 1, 5, '5']));
Но в этом случае "5" и 5 считаются одним и тем же значением,Я не знаю, как еще проверить наличие дубликатов - сортировка нарушает порядок появления дубликатов;и создание подсчета частот и чисел числа и строки как одно и то же.