我想這與數組填充類似,但我想知道它是否可以簡化。JavaScript:如何將x添加到數組x次?
var arr = [1,2,3],
x = 5;
for (var i=0; i<x; i++) {
arr.push(x);
}
console.log(arr);
//=> [1, 2, 3, 5, 5, 5, 5, 5]
有沒有辦法做到這一點,而不使用for循環?
更新
即使有發聰明解決方案,for循環似乎是最高效的
我想這與數組填充類似,但我想知道它是否可以簡化。JavaScript:如何將x添加到數組x次?
var arr = [1,2,3],
x = 5;
for (var i=0; i<x; i++) {
arr.push(x);
}
console.log(arr);
//=> [1, 2, 3, 5, 5, 5, 5, 5]
有沒有辦法做到這一點,而不使用for循環?
更新
即使有發聰明解決方案,for循環似乎是最高效的
除非你得到懲罰的每一行你寫的代碼,代碼很好:簡潔而且非常容易理解。
如果做得到懲罰,只需使用:
for (var i = 0; i < x; i++) arr.push(x);
在一行:-)
除此之外,你最好的選擇是沿着線功能:
arr = appendXCopiesOfX (arr, x);
但我不認爲你真的在那裏獲得任何東西,因爲如前所述,理解這樣一個小的l應該有很小的問題接力。
總而言之,這可能是浪費時間和精力來改善你目前的狀況。
沒有爲循環:
var arr = [1,2,3], x = 5;
arr = arr.concat(Array.apply(null, Array(x)).map(function() { return x; }));
// or even
arr = arr.concat(Array.apply(null, Array(x)).map(x.valueOf, x));
對於使用ES6和所遇到這個問題的。嘗試使用Array.fill()https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/fill
我在測試中使用此方法來生成x行的模擬數據,而無需循環。
編輯:對不起,我在這一個關閉。此代碼將生成一個數組x長,但它們都具有相同的值。在這篇文章的末尾有一個更好的代碼片段。
newOrdersX: function(x) {
return Array(x).fill({
name: faker.random.name()
});
}`
這一個將是一個x長度的數組,但每個值都會不同。請注意,.fill()
仍然需要調用,否則將無法工作。
newOrdersX: function(x) {
return Array(x).fill().map(() => ({
name: faker.random.name()
}));
}`
+1爲務實。很容易想要在無意義的優化中結束。 – naomik
我在我原來的問題中添加了基準 – naomik