0

我对编码完全陌生,我正在练习循环和数组。我创建了一个包含多个包含字符串对的子数组的数组。我正在尝试使用嵌套的 for 循环拉出并隔离每个字符串。这是我的代码:

const pairs = [['Blue', 'Green'],['Red', 'Orange'],['Pink', 'Purple']];

//attempting to use nested arrays to get each string from an array 
function getString(arr){
    //this loop should grab each array in the list of arrays
    for (let i = 0; i < arr.length; i++){
        console.log(i , arr[i]);
        //this should assign each sub array to a new var to be iterated over
        subArr = arr[i];
    } for (let j = 0; j < subArr.length; j++){
        console.log(j, arr[j]);
    }
};


console.log(getString(pairs)); 

问题是最后一个 for 循环的输出是: ['Pink', 'Purple'] 不是从嵌套循环中提取的每种颜色。

我在这里做错了什么?

  • 美里
4

4 回答 4

0

提供了解决方案

function getString(arr) {
  let arrResult = [];

  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      arrResult.push(arr[i][j]);
    }
  }

  return arrResult;
}
于 2021-01-16T20:34:57.940 回答
0

您需要嵌套循环,就像嵌套数组一样。另外,除非您想更改ior j,否则我建议您使用.forEach它,因为它更易于使用。

例子:

pairs.forEach((pair, i) => {
  pair.forEach((subPair, j) => {
    console.log(j, subPair);
  });
});

你也可以创建一个变量,在pair.forEach函数中推送到它,并在你的根函数结束时返回它。

我希望这能回答你的问题,谢谢你的发帖,祝你有美好的一天。;P

于 2021-01-16T20:42:41.177 回答
0

您应该像这样嵌套for循环:

for (let i = 0; i < arr.length; i++) {
  console.log(i, arr[i]);
  //this should assign each sub array to a new var to be iterated over
  subArr = arr[i];

  for (let j = 0; j < subArr.length; j++) {
    console.log(j, arr[j]);
  }
}

你怎么拥有它,他们会一个接一个地运行。

于 2021-01-16T20:34:07.660 回答
0

您的循环实际上并没有嵌套:您在开始第二个循环之前关闭第一个循环。因为subArr是一个全局变量(no let, const, orvar关键字),它仍然在第二个循环中定义,但这不是一个理想的做事方式。你还需要记录arr[i][j]而不是你拥有什么。

这解决了这些问题:

function getString(arr) {
  //this loop should grab each array in the list of arrays
  for (let i = 0; i < arr.length; i++){
    //this should assign each sub array to a new var to be iterated over
    let subArr = arr[i];
    for (let j = 0; j < subArr.length; j++){
      console.log(arr[i][j]);
    }
  }
};
getString(pairs);

您遇到的另一个问题是您正在调用console.log(getString(pairs)),但getString没有返回任何内容,它正在记录自己。例如,如果您希望它返回所有项目的换行符分隔的字符串,您可以将项目推送到数组并返回它们与换行符(或任何您想要的字符)连接:

function getString(arr) {
  let ret = []
  //this loop should grab each array in the list of arrays
  for (let i = 0; i < arr.length; i++){
    //this should assign each sub array to a new var to be iterated over
    let subArr = arr[i];
    for (let j = 0; j < subArr.length; j++){
      ret.push(arr[i][j]);
    }
  }
  return ret.join('\n')
};

console.log(getString(pairs));

嵌套循环本身并不理想,因为它们不像使用数组方法那样可读。使用forEach需要更少的代码:

function getString (arr) {
  arr.forEach(function (subArr) {
    console.log(subArr[0])
    console.log(subArr[1])
  })
}

getString(pairs)

或者,更简洁地说,您可以使用map

function getString (arr) {
  return arr.map(([ a, b ]) => `${a}\n${b}`).join('\n');
}
console.log(getString(pairs))

更简洁地说,你可以这样做[].flat()

const getString = (xs = []) => xs.flat().join('\n')
console.log(getString(pairs))
于 2021-01-16T20:34:20.447 回答