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