簡體   English   中英

javascript:將項目從一個數組中取出並放入另一個數組中

[英]javascript: pulling items out of one array and putting them in another

我有兩個陣列, numberspicks numbers包含一系列數字, picks當前為空。 我想拉N個值出numbers ,並把它們放在picks 所以我嘗試了picks.push(numbers.splice(idx,1)); ,其中idx是介於0和numbers的最高索引之間的隨機numbers 似乎不起作用。 任何意見,將不勝感激。

由於splice返回一個數組,因此您只需要稍作調整即可檢索此新數組中的第一個(也是唯一一個)項目:

picks.push(numbers.splice(idx,1)[0]);

好吧,就像許多其他人所說的那樣,Array.splice()返回一個數組(元素的順序是從源數組中刪除)。 因此,您可以使用您總是從中獲取一個數字的事實(例如@JoeEnos答案),也可以采用更通用的形式:

[].push.apply(picks, number.splice(idx, 1)); 
// replace 1 with any other positive number, and it still works

不過,在我看來,您只是在嘗試重新實現Fisher-Yates隨機播放算法。 在這里,關鍵是不使用splice (因為對大型數組重新排序可能會導致性能下降),而是將選擇的元素與源數組末尾的元素交換。 這是可以完成的方法:

var source   = [1,2,3,4,5,6,7,8];
var shuffled = Array(source.length);
var i, j, len;
for (i = 0, len = shuffled.length; i < len; ++i) {
  j = Math.random() * (i + 1)|0;
  if (i !== j) {
    shuffled[i] = shuffled[j];
  }
  shuffled[j] = source[i];
}
console.log(shuffled);

這是eval.in演示中的玩法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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