我正在关注FreeCodeCamp中的课程以学习Javascript。我在"两个阵列中的差异"。赋值是比较两个数组并返回一个新数组,其中只有在两个给定数组之一中找到的任何项,但不能同时返回两个数组。
下面是我尝试比较它们的代码,第二部分不适用。我想说明为什么条件循环的第二部分不起作用。
function diffArray(arr1, arr2) {
var filtered = [];
var l = 0;
newArr = Array.prototype.slice.call(arguments);
for (var j=0; j < newArr.length; j++){
for (var k=0; k < newArr[j].length; k++){
//values to check before and next index
l = j + 1;
var m = j-1;
if (l < newArr.length){
if (newArr[l].indexOf(newArr[j][k]) === -1){
filtered.push(newArr[j][k]);
} else if (j == newArr.length - 1){ // this part does not work
console.log(j);
if (newArr[m].indexOf(newArr[j][k]) === -1 ){
console.log(newArr[j]);
filtered.push(newArr[l][k]);
}
}
}
}
}
// Same, same; but different.
return filtered;
}
diffArray([1, "calf", 3, "piglet"], [1, "calf", 3, 4]);
感谢。
答案 0 :(得分:0)
你可以这样做:
var arr1 = [1,2,34,5,6,7,8,9];
var arr2 = [1,2,3,4,5,6,7,8,9];
var diff = arr1.concat(arr2).sort().filter((x, index, arr) => (x != arr[index+1] && x != arr[index-1]));
console.log(diff); // [ 3, 34, 4 ]
答案 1 :(得分:0)
这是我解决这个问题的方法,希望它可以帮到你。 首先我循环arr1,看看它能在arr2中找到一些匹配并在newArr中推送它 第二步我做第一步的事情,但是反转arr1和arr2,并将它推到newArr。
function diff(arr1, arr2) {
var newArr = [];
for(var i=0;i<arr1.length;i++){
if(arr2.indexOf(arr1[i])<0){
newArr.push(arr1[i]);
}
}
for(var j=0;j<arr2.length;j++){
if(arr1.indexOf(arr2[j])<0){
newArr.push(arr2[j]);
}
}
return newArr;
}
console.log(diff); // [ 3, 34, 4 ]
diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);