[英]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.