2016-07-19 27 views
0

我在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

'newArr.length'将2 所以在第一圈'Ĵ== 0'在翻译时达到你的病情 'Ĵ== newArr.length - 1''newArr.length-1 = 1''和'j = 0' '0!== 1' 然后在第二个循环中'j == 1'首先2个循环的'k'第一个条件是真的 –

+0

当'j'为0时,您不通过条件'else if(j == newArr.length - 1)',其中j = 0,newArr.length = 2。当'j'为1时,你没有通过条件'if(l dinesh

回答

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 ] 
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]); 
相关问题