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
推送时:
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