Симметрическая разность wiki Нужно найти симметрическую разность массивов. Написал функцию сравнения двух массивов, в которой объединяю массивы в один и в цикле ищу повторяющиеся значения. При нахождении удаляю.
function sym() { var args = Array.prototype.slice.call(arguments) var result = compareTwoArray(arguments[0], arguments[1])
if (arguments.length > 2) {
for (var i = 2 i < arguments.length i++) { // console.log('result = ' + result) result = compareTwoArray(result, arguments[i]) }
}
return result }
function compareTwoArray() { var args = Array.prototype.slice.call(arguments) var result = []
var newArr = args.reduce(function(prev, curr) { return prev.concat(curr) })
Не знаю, как обрабатывать повторяющиеся значения. В одном случае его нужно удалить. [1, 2, 3] [3, 1, 5] [2, 5] - должен получиться [2, 5] - получается с моим кодом В другом оставить. [1, 1, 3] [4, 6] [1, 3, 4, 6] - должен получиться [3, 4, 6] - получается с моим кодом В другом и оставить(1) и удалить(2). [1, 1, 2, 5] [2, 2, 3, 5] [1, 3] - должен получиться [3] - получается с моим кодом
Ответ Решение для двух массивов. Хотя 3 и больше массивов можно обрабатывать ступенчато: сначала два первых, потом результат первой обработки и 3 массив и так далее.
function sum(arr1, arr2) { var tmp = arr1.concat(arr2), result = [], value, sum for (var i = 0 i < tmp.length i++) { var value = tmp[i] if (result.indexOf(value) == -1) { sum = 0 if (arr1.indexOf(value) != -1) { sum++ } if (arr2.indexOf(value) != -1) { sum++ } if (sum == 1) { result.push(value) } } } return result }