我在玩一下,試圖實例化一個長度為x
的新數組,其中該數組的所有元素都初始化為值y
:< /p>
var arr = new Array(x).fill(y);
如果y
的值不是物件,那麼這個方法可以很好地工作。 也就是說,如果y
是一個對象,那麼以下條件就成立:
var arr = new Array(2).fill({}); arr[0] === arr[1]; //結果為true; arr[0].test = 'string'; arr[1].test === 'string'; //結果也為true;
有沒有辦法在使用fill函數時聲明每個元素都應該建立新物件?還是我應該將其轉換為循環?
接受的答案很好,在90%的情況下都能工作。
但是,如果你正在製作高效能的JS應用程序,並且使用大型/巨大的數組,Array.map(..)會在記憶體和處理器使用方面創建大量的負載,因為它會建立數組的副本。
我建議使用經典的for循環:
我測試了六種替代方案,得到了以下結果:
Array.map(),如上所述(比原來慢11倍!):
for迴圈,最好的選擇(最快):
forEach(慢6倍):
[更新於2020-08-27] Ilias Karim提出了另一種方法
Array.from(慢30倍!)- 在效能方面顯然更差,儘管語法最好 :(
[..Array(..)](慢5倍!)
Array.push(..),在效能方面排名第二(慢2倍!)
附註:我在這個fiddle上進行了測試。
您可以先使用任何值(例如
undefined
)填入數組,然後您就可以使用map
: