使用JavaScript遍历嵌套数组元素

时间:2019-03-28 20:10:25

标签: javascript arrays scope

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

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循环。

2 个答案:

答案 0 :(得分:3)

无论检查成功与否,您都将返回,并且有多余的for循环。您应该使用单个for循环来迭代该数组,并根据检查推送“高级”或“打开”到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]]))

答案 1 :(得分:3)

您只需要一个循环和一个数组即可获取值。

promise