【问题标题】:Loop Through Nested Array Elements With JavaScript使用 JavaScript 循环遍历嵌套的数组元素
【发布时间】:2019-08-19 17:24:42
【问题描述】:

我正在尝试遍历嵌套数组以确定数组中的元素是“开放”还是“高级”:

function openOrSenior(data) {

  for (let i = 0; i <= data.length; i++) {

    let dataElement = data[i];

    for (let j = 0; j <= dataElement.length; j++) {

      if (dataElement[0] >= 55 && dataElement[1] > 7) {

        return ["Senior"];

      }

      return ["Open"];

    }
  }
}

给定

的输入

[[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]

函数应该输出

["Open", "Open", "Senior", "Open", "Open", "Senior"]

但目前它看起来只是循环遍历主数组中的第一个元素 ([18, 20]),因为我的函数只返回:

["Open"]

为什么此函数无法继续循环遍历其他嵌套数组并返回“Open”或“Senior”?可能是范围有问题?

https://www.codewars.com/kata/categorize-new-member/train/javascript

我试图实现我发现的 here,它建议在 for 循环中使用 for 循环。

【问题讨论】:

  • 为什么需要第二个循环? dataElement 中只有两个元素,而且您按索引提及它们,那么为什么要使用第二个循环?
  • 哦,是的,没错 - 删除第二个 for 循环仍会返回,[Open]

标签: javascript arrays scope


【解决方案1】:

无论检查是否成功,您都会返回,并且您有一个冗余的 for 循环。您应该使用单个 for 循环迭代数组,并根据检查 push Senior 或 Open 到 result 数组。最后返回result数组。

function openOrSenior(data) {
  const result = [];

  for (let i = 0; i < data.length; i++) {
    const dataElement = data[i];

    if (dataElement[0] >= 55 && dataElement[1] > 7) {
      result.push("Senior");
    } else result.push("Open");
  }

  return result;
}

console.log(openOrSenior([[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]));

或者你可以使用Array.map():

const openOrSenior = data => 
  data.map(([a, b]) => 
    a >= 55 && b > 7 ? 'Senior' : 'Open'
  )

console.log(openOrSenior([[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]))

【讨论】:

    【解决方案2】:

    您只需要一个循环和一个数组来存储值。

    function openOrSenior(data) {
        var result = [];
        for (let i = 0; i < data.length; i++) {
            let [left, right] = data[i];
            result.push(left >= 55 && right > 7
                ? "Senior"
                : "Open"
            );
        }
        return result;
    }
    
    console.log(openOrSenior([[18, 20], [45, 2], [61, 12], [37, 6], [21, 21], [78, 9]]));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多