Я не могу понять в этом конкретном скрипте, как работает reduce. Мне кажется, что сокращение всегда рассматривает первый аргумент как накопитель, но в этом случае var result = [] кажется накопителем, или, может быть, я ошибаюсь. Изначально я понял, что первым аргументом функции symDiff (arrayOne) должен быть аккумулятор для метода reduce.
function sym() {
var args = [];
for (var i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
function symDiff(arrayOne, arrayTwo) {
var result = [];
arrayOne.forEach(function(item) {
if (arrayTwo.indexOf(item) < 0 && result.indexOf(item) < 0) {
result.push(item);
}
});
arrayTwo.forEach(function(item) {
if (arrayOne.indexOf(item) < 0 && result.indexOf(item) < 0) {
result.push(item);
}
});
return result;
}
// Apply reduce method to args array, using the symDiff function
return args.reduce(symDiff);
}
sym([1, 2, 3], [5, 2, 1, 4]);