鍍金池/ 問(wèn)答/Linux  HTML/ JS如何將2N個(gè)元素?cái)?shù)組兩兩隨機(jī)分組呢?

JS如何將2N個(gè)元素?cái)?shù)組兩兩隨機(jī)分組呢?

我想將一個(gè)有偶數(shù)個(gè)元素的數(shù)組兩兩隨機(jī)分組,比如

[1,2,3,4,5,6,7,8]

輸出可能有一個(gè)結(jié)果是:

[[1,3],[2,5],[4,8],[6,7]]

自己嘗試寫了一下代碼,如下:

function arrSlice(arr) {
    if(arr.length % 2 !== 0) return 0;
    var 
        newArr = [],
        //臨時(shí)輔助數(shù)組
        tmpArr = [];
    for(let i=0;i<arr.length;i++) {
        if(!tmpArr.includes(arr[i])) {
            var rndIndex;
            do {
                rndIndex = Math.floor(Math.random() * (arr.length - (i + 1))) + (i + 1);
            } while(tmpArr.includes(arr[rndIndex]));
            newArr.push([arr[i],arr[rndIndex]]);
            tmpArr.push(arr[i]);
            tmpArr.push(arr[rndIndex]);
        }
    }
    return newArr;
}

var arr = [1,2,3,4,5,6,7,8]
console.log(arrSlice(arr));

自己是一個(gè)JS新手,感覺(jué)寫出來(lái)的有點(diǎn)生硬,不知道有沒(méi)有更好的一個(gè)實(shí)現(xiàn),向各位大牛請(qǐng)教下,謝謝

回答
編輯回答
鹿惑
function arrSlice (arr) {
  return arr
    .sort(() => Math.random() > .5) // 打亂
    .map((e, i) => i % 2 ? null : [arr[i], arr[i + 1]]) // 兩兩取出
    .filter(Boolean)
}
2017年3月20日 06:59