【问题标题】:how to create a new array form nested arrays using nested loops JS如何使用嵌套循环 JS 创建一个新的数组形式的嵌套数组
【发布时间】:2018-05-13 22:46:39
【问题描述】:

我有一个嵌套数组,我需要创建两个新数组,一个用于偶数,另一个用于使用嵌套 for 循环的奇数。 我使用了 push 方法,但结果是每个数字都在一个单独的数组中,而我需要将所有偶数设置在一个数组中,奇数也一样。

这是我的代码:

var numbers = [
  [243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
  [34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
  [67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
  [12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
  [4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
  [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
  [74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
  [53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
  [67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
  [76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];

for (var x = 0; x < numbers.length; x++) {
    for (var y = 0; y < numbers[x].length; y++) {
    if (numbers[x][y] % 2 === 0) {
        var even = [];
        even.push(numbers[x][y]);
    } else {
        var odd = [];
        odd.push(numbers[x][y]);
    }
    console.log(odd);
}

【问题讨论】:

  • 不要在 if 条件中放置奇数和偶数……那样会在每次迭代时重新声明它们。
  • 罪魁祸首不是“声明”,而是循环内evenodd 的“分配”

标签: javascript arrays for-loop nested-loops


【解决方案1】:

您必须将所有嵌套数组合并到一个新数组中,然后您可以分别找到所有奇数和偶数,如下所示

var numbers = [
  [243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
  [34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
  [67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
  [12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
  [4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
  [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
  [74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
  [53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
  [67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
  [76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];
var merged = [].concat.apply([], numbers);
var evenValues = [];
var oddValues = [];
for (var i = 0; i < merged.length; i++) {
  if ((merged[i] % 2) != 1) {
    evenValues.push(merged[i]);
  } else {
    oddValues.push(merged[i]);
  }
}
console.log(evenValues);
console.log(oddValues);

【讨论】:

    【解决方案2】:
    var odd = [], even= [];
    for (var x = 0; x < numbers.length; x++) {
        for (var y = 0; y < numbers[x].length; y++) {
        if (numbers[x][y] % 2 === 0) {
            even.push(numbers[x][y]);
        } else {
            odd.push(numbers[x][y]);
        }
        console.log(odd);
    }
    

    只需将偶数和奇数变量放在循环之外

    【讨论】:

    • 在你的例子中,你每次循环你的值时都会清理你的数组。
    【解决方案3】:

    编写var even = [];var even = new Array(); 的快捷方式,因此,当您在循环中执行此操作时,您将在每次迭代时创建一个新数组,并且每个新数组都会覆盖前一个数组。例如,下面的代码创建了 3 个不同的数组并且只保存了最后一个(在i = 2 时定义):

    for (var i = 0; i < 3; i++) {
      var a = [i];
    }
    console.log(a); // [2]
    

    如果整个循环只需要一个数组,则必须在循环外定义它:

    var a = [];
    for (var i = 0; i < 3; i++) {
      a.push(i);
    }
    console.log(a); // [0, 1, 2]
    

    【讨论】:

    • @downvoter 有什么解释吗?有什么令人困惑的地方吗?
    • @downvoter 好吧,我想除了缺乏礼貌之外没有其他原因。
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2012-07-24
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多