嵌套数组操作看起来像一个矩阵

时间:2013-02-10 07:12:41

标签: javascript google-apps-script

我正在检索一些数据,数据如下所示:

1,  2,  3,  4,  5
6,  7,  8,  9,  10
11, 12, 13, 14, 15

我希望它看起来像这样

[
   [[1],[2],[3],[4],[5]],
   [[6],[7],[8],[9],[10]],
   [[11],[12],[13],[14],[15]]
]

因此,我可以像矩阵一样对数组进行寻址,data[0][1]将为“2”。

通过这个答案,它几乎是there,但并不完全。我很难看起来像我想要的那样。

3 个答案:

答案 0 :(得分:5)

如果这准确地代表了您的输入数据,那该怎么做:

var data   = "1,2,3,4,5\n6,7,8,9,10\n11,12,13,14,15";
var matrix = data.split('\n').map(function(val) {
  return val.split(',');
});

请注意,您指定的输出可能不是您的意思。每个数字可能不应该是它自己的单项数组。相反,上面的代码产生:

[
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 1]
]

这意味着matrix[0][1]将返回2,而不是必须matrix[0][1][0]

编辑:正如评论中所述,我已将其留给您,以确保符合您的浏览器支持需求。这也适用于你曾经写过的所有其他JS系列......

答案 1 :(得分:1)

注意 - 如果您需要遍历数组,请使用简单的for,而不是for..in

  • for..in以无保证的顺序返回项目,这可能不是您在使用数组时所需的项目
  • for..in不仅仅返回数组元素,而是添加到Array原型中的任何内容(意味着如果使用传统的for循环,您可以完全确信代码可以正常工作,无论外部库可能包含在哪个外部库中页面。无需担心其他编码器已将属性/方法添加到Array.prototype)

如果\n是行分隔符而,是行中的项目分隔符,则可以使用以下内容:

/* assuming data is already filled like:
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
*/
var arr = data.split("\n"), arr2 = [];
for(var i = 0; i < arr.length; i++) {
    if(arr[i] != '') arr2.push(arr[i].split(','));
}
console.log(arr2);
/* arr2 will be like:
[
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
*/

答案 2 :(得分:-1)

var data = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'.split(',');
var matrixData = [];
while (data.length > 0) {
    matrixData.push(data.splice(0, 5));
}
document.write(matrixData[0][1]);

编辑:如果您将数据作为一个简单的数字数组