条件循环不按预期工作

时间:2016-07-19 09:15:12

标签: javascript arrays if-statement

我正在关注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]);

感谢。

2 个答案:

答案 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]);