【问题标题】:javascript for-loop multidimensional array "cannot read property length of undefined"javascript for循环多维数组“无法读取未定义的属性长度”
【发布时间】:2015-08-12 02:34:44
【问题描述】:

我有一个叫做字符串的多维数组,例如:

[['10','-','-','-','-','-','-','7','-'],
['-','12','-','14','-','-','11','-','-'],
['-','-','8','-','-','10','-','-','-']]

我正在尝试使用 for 循环来读取数组,但我需要它来读取所有三个内部数组的 0 索引,然后读取所有三个的 1 索引,等等([0][0],[ 1][0]、[2][0]、[0][1] 等)。

这是我在函数内部设置的for循环结构:

      var z = 0;
      for (var i = 0; i < strings[z].length; i++) {
        for (var j = 0; j < strings.length; j++) {
          if (strings[j][i] != '-') {
              notes.push(strings[j][i] + "-");
          }
        }
        z++;
      }

我在控制台中收到错误:“无法读取未定义的属性‘长度’”在我的第一个循环 (i

提前致谢。

*编辑为在每个数组值周围添加引号(这就是我的代码中的方式)

【问题讨论】:

  • 你需要引用- 所以“-”。
  • 一个问题是你的数组不是所有的字符串。您在整个数组中都有未加引号的连字符。
  • 抱歉,为了简化,我遗漏了一些代码/细节,但数组实际上在每个连字符和数字周围都有引号

标签: javascript arrays for-loop multidimensional-array


【解决方案1】:
var strings = [
    [10,'-','-','-','-','-','-',7,'-'],
    ['-',12,'-',14,'-','-',11,'-','-'],
    ['-','-',8,'-','-',10,'-','-','-']
]

// get the length of the longest array
var maxLength = Math.max.apply(null, strings.map(function(e) { return e.length }));

var notes = [];
for (var j = 0; j < maxLength; j++)
    strings.forEach(function(iString) {
        // the undefined takes care of shorter arrays
        if (iString[j] !== undefined && iString[j] !== '-')
            notes.push(iString[j] + "-");
    });

console.log(notes)

【讨论】:

    【解决方案2】:

    这是一种方法:

    var strings = [['10', '-', '-', '-', '-', '-', '-', '7', '-'],
        ['-', '12', '-', '14', '-', '-', '11', '-', '-'],
        ['-', '-', '8', '-', '-', '10', '-', '-', '-']]
    ;
    
    var buffer = [];
    
    for (i = 0; i < strings.length; i++) {
        for (j = 0; j < strings[i].length; j++) {
            if (buffer[j] == undefined) buffer[j] = [];
            buffer[j].push(strings[i][j]); 
        }
    }
    
    // now, strings[i][j] => buffer[j][i]
    
    notes = [];
    
    for (i = 0; i < buffer.length; i++) {
        for (j = 0; j < buffer[i].length; j++) {
            if (buffer[i][j] != '-') notes.push(buffer[i][j] + '-');
        }
    }
    
    console.log(notes);
    

    结果:

    ["10-", "12-", "8-", "14-", "10-", "11-", "7-"]
    

    【讨论】:

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