繁体   English   中英

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));

要创建一个mxn数组,只需两次使用此技巧即可:

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

使用这种方法,该数组的每个元素都是undefined (但是它将是一个适当的数组-可迭代的,否则-否则)。 要使用特定值,只需添加另一个-fill- 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);

这将返回[ [ '', '', '', '', '' ], [ '', '', '', '' ] ]

这是它的代表https://repl.it/BaQT/0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM