簡體   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