[英]JavaScript: How to add x to an array x times?
我想這類似於數組填充,但我想知道它是否可以簡化。
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);
但是我認為你並沒有真正獲得任何東西,因為如上所述,理解這么小的循環應該沒什么問題。
總而言之,這可能是浪費時間和精力來改善你現在擁有的東西。
沒有for循環:
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()
}));
}`
另一個 ES6 選項是使用Array.from()
創建一個長度為原始數組 + x
的數組:
const pad = (arr, x) => Array.from({ length: arr.length + x }, (_, i) => arr[i] ?? x) const arr = [1,2,3], x = 5; console.log(pad(arr, x));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.