Rumah > Soal Jawab > teks badan
P粉8785105512023-08-24 00:43:53
Jawapan yang diterima adalah bagus dan berfungsi 90% sepanjang masa.
Walau bagaimanapun, jika anda membuat aplikasi JS berprestasi tinggi dan anda menggunakan tatasusunan besar/besar, Array.map(..) akan menghasilkan banyak beban dari segi penggunaan memori dan pemproses kerana ia akan mencipta tatasusunan salinan.
Saya mengesyorkan menggunakan gelung untuk klasik:
a = new Array(ARRAY_SIZE); for (var i = 0; i < ARRAY_SIZE; i++) { a[i] = []; } // 或者使用一行代码的替代方案 for (var i = 0, a = []; i < ARRAY_SIZE; a[i++] = []);
Saya menguji enam alternatif dan mendapat keputusan berikut:
Array.map(), seperti di atas (11 kali lebih perlahan! ):
a = new Array(ARRAY_SIZE).fill().map(u => { return []; });
untuk gelung, pilihan terbaik (terpantas):
// 标准的多行方式 a = new Array(ARRAY_SIZE); for (var i = 0; i < ARRAY_SIZE; i++) { a[i] = []; } // 一行语法 for (var i = 0, a = []; i < ARRAY_SIZE; a[i++] = []);
forEach (6 kali lebih perlahan):
a = new Array(ARRAY_SIZE).fill(); a.forEach((val, i) => { a[i] = []; })
[Dikemaskini pada 27-08-2020] Ilias Karim mencadangkan kaedah lain
Array.from (30x lebih perlahan! ) - jelas lebih teruk dari segi prestasi, walaupun mempunyai sintaks terbaik :(
a = Array.from({ length: ARRAY_SIZE }, () => []);
[..Array(..)] (5 kali lebih perlahan! )
a = [...Array(ARRAY_SIZE)].map(_=>([]))
Array.push(..), menduduki tempat kedua dari segi prestasi (2x lebih perlahan! )
let a = [], total = ARRAY_SIZE; while(total--) a.push([]);
PS: Saya mengujinya pada rebab ini.
P粉4615998452023-08-24 00:21:01
Anda boleh menggunakan mana-mana nilai dahulu (cth undefined
)填充数组,然后您就可以使用map
:
var arr = new Array(2).fill().map(u => ({}));
var arr = new Array(2).fill().map(Object);