Я писал код, чтобы сделать симметричную разницу между или несколькими массивами. Как вы знаете, симметричная разница заключается в исключении элементов, которые находятся в обоих наборах данных. Более подробная информация: https://en.wikipedia.org/wiki/Symmetric_differenceсимметричная разница между массивами
Это мой код:
//This function drops any repeated element from a vector
function unify(arr){
var result=arr.reduce(function(vector,num,index,self){
var len=self.filter(function (val){
return val===num;
}).length;
if (len>1){
var pos=self.indexOf(num);
self.splice(pos,1);
}
vector=self;
return vector;
},[]);
return result;
}
function sym(args) {
var arg = Array.prototype.slice.call(arguments);
var compact= arg.map(function(vector){
return unify(vector);
});
//We compare the vectors and delete any repeated element before we concat them
return compact.reduce(function(prev,next,index,self){
for (var key in next) {
var entry=next[key];
var pos=prev.indexOf(entry);
if (pos!==-1){
prev.splice(pos,1);
next.splice(key,1);
}
}
return prev.concat(next);
});
}
console.log(sym([1, 2, 3], [5, 2, 1, 4]));
Я не понимаю, что я делаю неправильно. Я ожидал получить результат [3,4,5]
, но это не результат, который я получаю.
нам действительно нужно смотреть Видеосервис YouTube, чтобы понять ваш вопрос делать? Кроме того, мы действительно не знаем, что вы делаете неправильно, потому что вы не описали проблему! – Jamiec
жаль расстраивать вас, я не знал, что такое симметричная разница, пока я не увидел видео. С другой стороны, если вы выполните код, вы увидите, что он не выполняет то, что я описываю (симметричная разность). Что нужно мне описать? – galeonweb
Что * делает * делаю, какой * should * делаю. Создайте [mcve] для демонстрации. – Jamiec