JavaScript 二维 Array.push()

JavaScript 2-Dimensional Array.push()

推送时:

a=[ ['','','','','','','',''] ];
a.push("['','','','','','','','']");

a=[ ['','','','','','','',''] ];
a.push(new Array(8));

我想得到:

a=[ ['','','','','','','',''], ['','','','','','','',''] ];

结果,我得到:

a= [ ['','','','','','','',''], '','','','','','','','' ];

我只想添加一个元素(里面有 8 个子元素)。 相反,我现在有 9 个元素。 正如您想象的那样,它扰乱了我的 array.length 价值观!

我明白了:

a.push('','','','','','','','');

将添加 8 个额外元素,就像我分别推送每个元素一样。

连我都试过了:

EmptyData=['','','','','','','',''];
a.push(EmptyData);

并且仍然添加了 8 个元素。 我做错了什么?

简短的解决方案或 jsfiddle 将是一份很棒的节日礼物。

a.push("['','','','','','','','']"); 你推的是字符串 "...",不是数组

这会很好用:

a=[ ['','','','','','','',''] ];
a.push(['','','','','','','','']);

您可以使用这个技巧来创建一个 正常 的 N 元素数组:

var arr_of_n_elements = Array.apply(null, Array(n));

要创建一个 m x n 数组,只需使用这个技巧两次:

var m_n_arr = Array.apply(null, Array(n)).map(function() {
   return Array.apply(null, Array(m));
});

使用这种方法,该数组的每个元素都将是 undefined(但它将是一个适当的数组 - 可迭代等 - 否则)。要使用特定值,只需添加另一个 - 填充符 - map:

var empty_val = '';
var m_n_arr = Array.apply(null, Array(m)).map(function() {
   return Array.apply(null, Array(n)).map(function() {
     return empty_val;
   });
}); 

如果你的目标平台支持Array.prototype.fill(),它会更简洁:

var m_n_arr = Array.apply(null, Array(n)).map(function() {
   return Array(m).fill(empty_val);
});

不要陷入过于简单化的陷阱:这...

var m_n_arr = Array(n).fill(Array(m).fill(empty_val));

... 将创建一个完全相同的对象数组。现在,当您更改一行中的值时:

m_n_arr[0][0] = '42';

...这意味着第 0 列的所有元素也都等于“42”。而这几乎不是您想看到的。 )

任意长度的解决方案:

var a = [['', '', '', '', '', '', '', '']];
a.push(Array.apply(null, { length: 8 }).map(function () { return ''; }));
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');

为获得最佳实践,您应该将另一个数组指定为变量。

var x = [ ['', '', '', '', ''] ],

y = ['', '', '', ''];

x.push(y);

console.log(x);

这将 return [ [ '', '', '', '', '' ], [ '', '', '', '' ] ]

这是一个回复https://repl.it/BaQT/0