javascript for-loop多维数组"无法读取未定义的属性长度"

时间:2015-08-12 02:34:45

标签: javascript arrays for-loop multidimensional-array

我有一个名为strings的多维数组,例如:

class Cloud : NSObject {

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

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

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

我在控制台中收到错误:"无法读取属性'长度'未定义"在我的第一个循环的行上(i< strings [z] .length)。我对javascript相当新,但我认为如果我在循环之外全局定义变量z,我将能够在循环条件中使用它。任何人都可以帮助我,让我知道为什么字符串[z]是未定义的,如果有另一种/更好的方法在我需要的模式中循环遍历数组?

提前致谢。

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

2 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:0)

这是一种方法:

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-"]