Я пишу функцию diff(arr1, arr2) для сравнения двух массивов и возврата нового массива со всеми элементами, не найденными в обоих исходных массивах.
Пример:
diff([1, 2, 3, 5], [1, 2, 3, 4, 5])
// [4]
diff([1, "calf", 3, "piglet"], [7, "filly"])
// [1, "calf", 3, "piglet", 7, "filly"]
Мое решение состоит в том, чтобы построить объект, используя уникальное значение в массиве в качестве ключа и частоту в качестве значения для этого ключа. Затем я собираю ключ, значение которого равно 1, в новый массив.
Проблема: я думаю, что тот факт, что ключ обрабатывается как строка в объекте, делает мое решение не очень элегантным, потому что мне нужно будет использовать Number() для преобразования «целочисленного» ключа из строки в число.
Вопрос: мой код работает, но есть ли у кого-нибудь лучшее решение для поиска уникальных значений после сравнения двух массивов?
Мой код:
function diff(arr1, arr2) {
var newArr = arr1.concat(arr2);
var dict = {};
for (var i = 0; i < newArr.length; i++) {
if (!dict[newArr[i]]) {
dict[newArr[i]] = 1;
}
else {
dict[newArr[i]]++;
}
}
var unique = [];
for (var key in dict) {
if (dict[key] === 1) {
if (!Number(key)) {
unique.push(key);
}
else {
unique.push(Number(key));
}
}
}
return unique;
}
Спасибо за помощь =)
Set
. - person thefourtheye   schedule 30.10.2015