色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript不重復隨機抽取數組

王梓涵1年前6瀏覽0評論

在JavaScript編程中,我們常常需要從一個數組中隨機抽取一個或多個值,然而有時我們又需要保證抽取的值不重復。這時候該如何處理呢?本文將介紹一種JavaScript實現不重復隨機抽取數組元素的方法。

假設我們有一個數組arr,其中存儲著幾個元素,我們想要從這些元素中隨機抽取兩個。首先我們可以使用JavaScript提供的Math.random()函數生成一個0到1的隨機數,然后將它乘以數組長度,再使用Math.floor()函數化為整數,這樣就可以得到一個0到數組長度之間的隨機下標。

var arr = ["a", "b", "c", "d", "e", "f"];
var index1 = Math.floor(Math.random() * arr.length); //隨機下標1
var index2 = Math.floor(Math.random() * arr.length); //隨機下標2

但是,這樣實現的抽取存在一個問題:有可能會重復抽取到同一個元素。比如,我們抽取到的隨機下標1是3,隨機下標2也是3,那么我們抽到的兩個元素就是同一個。這顯然不符合我們的要求。

為了避免出現重復抽取相同元素的情況,我們可以使用一個輔助數組tempArr,每次隨機抽取一個元素時,將該元素從原數組中刪除并加入到tempArr中。這樣,下次抽取時就不可能再次抽到已經在tempArr中的元素了。

var arr = ["a", "b", "c", "d", "e", "f"];
var tempArr = [];
var index1 = Math.floor(Math.random() * arr.length); //隨機下標1
tempArr.push(arr[index1]); //將抽取的元素加入tempArr并從原數組刪除
arr.splice(index1, 1);
var index2 = Math.floor(Math.random() * arr.length); //隨機下標2
tempArr.push(arr[index2]); //同上

當然,這種處理方法還有更方便的實現方式。ES6中提供了Set對象,它可以用來存儲不重復的值。我們可以將原數組轉化為一個Set集合,并使用擴展運算符(...)取出其中的元素,并隨機抽取一定數量的元素。由于Set中的元素是不重復的,所以我們也可以直接得到不重復的抽取結果。

var arr = ["a", "b", "c", "d", "e", "f"];
var set = new Set(arr);
var tempArr = [...set]; //將Set轉化為數組
var result = [];
while(result.length < 2) {
var index = Math.floor(Math.random() * tempArr.length);
result.push(tempArr[index]);
tempArr.splice(index, 1); //從tempArr中刪除已經抽取的元素
}

上述方法均可實現不重復隨機抽取數組元素的功能,使用哪種方法可以根據具體情況來選擇。值得注意的是,在處理數組時需要考慮到數組可能存在空元素、重復元素等情況,以保證程序的正確性。