Условный цикл не работает должным образом

javascript arrays if-statement

115 просмотра

2 ответа

1365 Репутация автора

Я изучаю курсы в FreeCodeCamp для изучения Javascript. Я в "Diff in Two Arrays". Назначение сравнивает два массива и возвращает новый массив с любыми элементами, найденными только в одном из двух указанных массивов, но не в обоих.

Ниже приведен код, который я пытаюсь сравнить, вторая часть не применяется. Я хочу понять, почему вторая часть условного цикла не работает.

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

Благодарю.

Автор: ytsejam Источник Размещён: 19.07.2016 09:15

Ответы (2)


0 плюса

2758 Репутация автора

Вы можете сделать это так:

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 ]
Автор: kevin ternet Размещён: 19.07.2016 08:02

0 плюса

1 Репутация автора

Это мой способ решить эту проблему, надеюсь, это поможет вам. во-первых, я зацикливаю 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]);
Автор: ZhaoWeihao Размещён: 21.06.2017 01:10
Вопросы из категории :
32x32