簡體   English   中英

JavaScript:如何將 x 添加到數組 x 次?

[英]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 循環似乎是最高效的

數組填充 2 jsperf 上的基准測試

除非你對你編寫的每一行代碼都受到懲罰,否則代碼很好:簡潔且非常容易理解。

如果得到懲罰,只需使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM