[英]javascript: pulling items out of one array and putting them in another
我有兩個陣列, numbers
和picks
。 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.