Javascript嵌套数组返回偶数

时间:2017-06-17 20:19:22

标签: javascript arrays nested-loops

我正在尝试编写一个只打印嵌套数组中偶数的函数。这是我的尝试,它不断返回" undefined"。

function printEvents(){

 var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];

  for (var i = 0; i<nestedArr.length; i++) {
    for (var j = 0; j<nestedArr[i]; j++) {
      var evenNumbers = nestedArr[i][j]
    }
  }

  if (evenNumbers % 2 == 0) {
    console.log(evenNumbers)
  }

 }

 printEvents(); 

4 个答案:

答案 0 :(得分:3)

如果项目是数组,则可以使用递归方法。您需要在for循环内移动测试均匀度。

function printEvents(array) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (Array.isArray(array[i])) {
            printEvents(array[i]);
            continue;
        }
        if (array[i] % 2 == 0) {
            console.log(array[i]);
        }
    }
}

printEvents([[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 11, 12], [[[13, [14]]]]]);

回调解决方案

function getEven(a) {
    if (Array.isArray(a)) {
        a.forEach(getEven);
        return;
    }
    if (a % 2 == 0) {
        console.log(a);
    }
}

getEven([[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 11, 12], [[[13, [14]]]]]);

答案 1 :(得分:2)

你只有几个问题。您需要检查嵌套数组的长度,并且需要移动代码来检查数组中数字是否均匀。

 var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];

  for (var i = 0; i<nestedArr.length; i++) {
    for (var j = 0; j<nestedArr[i].length; j++) {
      var evenNumbers = nestedArr[i][j]
      if (evenNumbers % 2 == 0) {
        console.log(evenNumbers)
      }
    }
  }

答案 2 :(得分:1)

使用接受filter方法的callback方法,您可以更轻松地完成此任务。

&#13;
&#13;
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
var mergedArray=[].concat.apply([], nestedArr);
console.log(mergedArray.filter(a=>a%2==0));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

你可以快速使用reduce with every。

var nestedArr = [ [1, 2, 3],[4, 5, 6],[7, 8],[9, 10, 11, 12]];

var sift = nestedArr.reduce(function(r,o) {
    o.every(i => i % 2 === 0 ? r.push(i) : true)
    return r;
}, []);

console.log(sift);

如果你想要一个单行,你可以使用ReduceRight with Filter

var nestedArr = [[1, 2, 3],[4, 5, 6],[7, 8],[9, 10, 11, 12]];

var sift = nestedArr.reduceRight((p, b) => p.concat(b).filter(x => x % 2 === 0), []);

console.log(sift)