我有一个名为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]是未定义的,如果有另一种/更好的方法在我需要的模式中循环遍历数组?
提前致谢。
*编辑以在每个数组值周围添加引号(这是我的代码中的方式)
答案 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-"]