Javascript 查找两个数组之间的对称差
我想找出两个数组之间的对称性差异。 工作,但是我想写一个只针对两个数组的函数,而不是一个查找一组数组之间对称差异的函数。函数应如下所示:Javascript 查找两个数组之间的对称差,javascript,algorithm,symmetric-difference,Javascript,Algorithm,Symmetric Difference,我想找出两个数组之间的对称性差异。 工作,但是我想写一个只针对两个数组的函数,而不是一个查找一组数组之间对称差异的函数。函数应如下所示: function diffArray(arr1, arr2) { } 然后返回一个具有对称差分的新数组 到目前为止,我最好的尝试是 var newArr = []; for (var i = 0; i < arr1.length; i++){ var x = arr[i]; for (var n = 0; n < a
function diffArray(arr1, arr2) { }
然后返回一个具有对称差分的新数组
到目前为止,我最好的尝试是
var newArr = [];
for (var i = 0; i < arr1.length; i++){
var x = arr[i];
for (var n = 0; n < arr2.length; n++){
var y = arr2[n];
if (y === x){
break;
} else {
newArr.push(y);
}
}
}
var newArr=[];
对于(变量i=0;i
然而,我知道这甚至还不接近。问题(这是FreeCodeCamp的算法问题)提示在实现中使用方法array.filter()、array.indexOf()、array.concat()、array.slice()。
我知道一般的想法是取其中一个数组中的每个元素(在我的例子中是第一个),然后将其与第二个数组中的每个元素进行比较。如果没有找到匹配项,则将该元素推入newArr
是否有人能帮助您实现一个使用上述方法的完善的实现,并对其工作原理提供可靠的解释/意见
谢谢大家! 好的。我解决了它,但我认为它仍然可以做得更好
function diffArray(arr1, arr2) {
var newArray = [];
function inArray2(value){
if(arr2.indexOf(value) == -1){
return true;
}
return false;
}
function inArray1(value){
if(arr1.indexOf(value) == -1){
return true;
}
return false;
}
var arr1Filtered = arr1.filter(inArray2);
var arr2Filtered = arr2.filter(inArray1);
newArray = arr1Filtered.concat(arr2Filtered);
return newArray;
}
因为它通过了所有测试用例,所以我认为它对所有用例都是正确的。呼
更新:新的和改进的算法,感谢来自的有用输入。希望这有助于任何人谁也被困在这个挑战
function diffArray(arr1, arr2) {
var newArray = [];
function notInArray2(value){
return arr2.indexOf(value) === -1;
}
function notInArray1(value){
return arr1.indexOf(value) === -1;
}
var arr1Filtered = arr1.filter(notInArray2);
var arr2Filtered = arr2.filter(notInArray1);
newArray = arr1Filtered.concat(arr2Filtered);
return newArray;
}
还有一个想法:
function diffArray(arr1, arr2) {
var newArr = [];
return arr1.filter(function(val) {
return arr2.indexOf(val) === -1;
})
/*the method above, returns a new array, so you can chain it
to concat with the array returned from the filter() method
in the arr2...*/
.concat(arr2.filter(function(val) {
return arr1.indexOf(val) === -1;
}));
}
这是我的简单解决方案
function diffArray(a, b){
c = a.concat(b)
d = [];
var diffarr = c.filter(function(c1){
if (a.indexOf(c1) === -1 || b.indexOf(c1) === -1){
d.push(c1)
}
})
return d;}
diffArray([1,2,3,5],[1,2,3,4,5])
arr1.filter((el)=>arr2.indexOf(el)arr1.indexOf(el)不幸的是,无法使用ES6。感谢您,只需将箭头函数替换为普通函数,(el)=>arr2.indexOf(el)不应inaray1
命名为notinaray1
?此外,您也可以说返回arr1.indexOf(value)=-1;
。