通过数组看似简单的循环上的TypeError

时间:2018-12-20 02:34:40

标签: javascript arrays

我正在尝试创建一个非常简单的嵌套for循环,以打印出NxN(对于任何N)数组中的每个项目。看起来很简单,但我不断收到此错误:

“ TypeError:无法读取未定义的属性'0'”

我尝试了多种访问数组中每个项目/子项目的方法,但是没有运气。我不断收到相同的错误。 (并且bing传入函数的数组肯定是NxN。)

这是我的代码:

const twoDimensionalArray = [
    [3, 4, 2, 4],
    [2, 1, 5, 7],
    [5, 3, 3, 2],
    [3, 6, 1, 5]
];

function printMatrix(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length[i]; i++) {
            console.log(arr[i][j]);
        };
    };
}

console.log(printMatrix(twoDimensionalArray));

4 个答案:

答案 0 :(得分:2)

这是您的代码,其中包含注释中指出的更正

  1. arr.length[i]-> arr[i].length
  2. 第二i++-> j++
  3. console.log(printMatrix(twoDimensionalArray))-> printMatrix(twoDimensionalArray)

const twoDimensionalArray = [
    [3, 4, 2, 4],
    [2, 1, 5, 7],
    [5, 3, 3, 2],
    [3, 6, 1, 5]
];

function printMatrix(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr[i].length; j++) {
            console.log(arr[i][j]);
        };
    };
}

printMatrix(twoDimensionalArray);

答案 1 :(得分:1)

请使用以下代码进行更正。 始终尝试将中间阶段存储到局部变量中,并使用它以获得更好的性能

    const s = "haveaniceday";
    let result = encryption(s);

    function encryption(s) {

      let sqr = Math.sqrt(s.length),
        col = Math.ceil(sqr),
        row = Math.floor(sqr);

      let chunks = chunkSubstr(s, col);
      // => ["have", "anic", "eday"]
      console.log(chunks);
      var result = [];
      for (var i = 0; i < chunks.length; i++) {
        // do some magic here...      
        // expected output: "hae and via ecy"

         var split =  Array.from(chunks[i]);
         for (var s = 0; s < split.length; s++) {

            var previousValue = '';
            if(result[s])
             { previousValue = result[s];}

            result[s]=previousValue + split[s];
    }


      }

console.log(result);

    }


    function chunkSubstr(str, size) {
      const numChunks = Math.ceil(str.length / size)
      const chunks = new Array(numChunks)

      for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
        chunks[i] = str.substr(o, size)
      }

      return chunks
    }

答案 2 :(得分:1)

您可以使用for..of来停止担心索引。变得非常简单。

const twoDimensionalArray = [
  [3, 4, 2, 4],
  [2, 1, 5, 7],
  [5, 3, 3, 2],
  [3, 6, 1, 5]
];

function printMatrix(arr) {
  for (let i of arr) {
    for (let j of i) {
      console.log(j);
    }
  }
}

printMatrix(twoDimensionalArray);

上面的comment中也提到了这一点。

答案 3 :(得分:0)

{{1}}