Hướng dẫn how do you shuffle items in javascript? - làm thế nào để bạn xáo trộn các mục trong javascript?

Shuffle mảng tại chỗ

function shuffleArr (array){
    for (var i = array.length - 1; i > 0; i--) {
        var rand = Math.floor(Math.random() * (i + 1));
        [array[i], array[rand]] = [array[rand], array[i]]
    }
}

Es6 tinh khiết, lặp đi lặp lại

const getShuffledArr = arr => {
    const newArr = arr.slice()
    for (let i = newArr.length - 1; i > 0; i--) {
        const rand = Math.floor(Math.random() * (i + 1));
        [newArr[i], newArr[rand]] = [newArr[rand], newArr[i]];
    }
    return newArr
};

Kiểm tra độ tin cậy và hiệu suất

Một số giải pháp trên trang này không đáng tin cậy (chúng chỉ ngẫu nhiên một phần cho mảng). Các giải pháp khác ít hiệu quả hơn đáng kể. Với testShuffleArrayFun (xem bên dưới), chúng tôi có thể kiểm tra các chức năng xáo trộn cho độ tin cậy và hiệu suất.

function testShuffleArrayFun(getShuffledArrayFun){
    const arr = [0,1,2,3,4,5,6,7,8,9]

    var countArr = arr.map(el=>{
        return arr.map(
            el=> 0
        )
    }) //   For each possible position in the shuffledArr and for 
       //   each possible value, we'll create a counter. 
    const t0 = performance.now()
    const n = 1000000
    for (var i=0 ; i{countArr[key][value]++}
        )
    }
    const t1 = performance.now()
    console.log(`Count Values in position`)
    console.table(countArr)

    const frequencyArr = countArr.map( positionArr => (
        positionArr.map(  
            count => count/n
        )
    )) 

    console.log("Frequency of value in position")
    console.table(frequencyArr)
    console.log(`total time: ${t1-t0}`)
}

Các giải pháp khác

Các giải pháp khác chỉ để giải trí.

ES6 thuần khiết, đệ quy

const getShuffledArr = arr => {
    if (arr.length === 1) {return arr};
    const rand = Math.floor(Math.random() * arr.length);
    return [arr[rand], ...getShuffledArr(arr.filter((_, i) => i != rand))];
};

ES6 thuần khiết sử dụng mảng.map

function getShuffledArr (arr){
    return [...arr].map( (_, i, arrCopy) => {
        var rand = i + ( Math.floor( Math.random() * (arrCopy.length - i) ) );
        [arrCopy[rand], arrCopy[i]] = [arrCopy[i], arrCopy[rand]]
        return arrCopy[i]
    })
}

ES6 thuần túy bằng cách sử dụng mảng.Reduce

function getShuffledArr (arr){
    return arr.reduce( 
        (newArr, _, i) => {
            var rand = i + ( Math.floor( Math.random() * (newArr.length - i) ) );
            [newArr[rand], newArr[i]] = [newArr[i], newArr[rand]]
            return newArr
        }, [...arr]
    )
}

Hướng dẫn how do you shuffle items in javascript? - làm thế nào để bạn xáo trộn các mục trong javascript?

Hướng dẫn how do you shuffle items in javascript? - làm thế nào để bạn xáo trộn các mục trong javascript?

Trong bài viết này, chúng tôi sẽ xem xét một vài cách để xáo trộn một mảng trong JavaScript.

Tùy chỉnh sắp xếp

Cách đầu tiên và đơn giản nhất để xáo trộn một mảng trong JavaScript là cung cấp chức năng tùy chỉnh cho .sort().

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const shuffledArray = array.sort((a, b) => 0.5 - Math.random());

Nhập chế độ FullScreenen EXIT Mode FullScreen

Vì chức năng chúng tôi chuyển sang .sort() đang tìm kiếm một số dương hoặc âm để di chuyển vật phẩm 'lên' hoặc 'xuống' trong mảng .

Điều này hoạt động cho một cách tiếp cận thô sơ và sẵn sàng nhưng có thể không cung cấp cho bạn một sự xáo trộn thực sự ngẫu nhiên.

Nếu bạn thực hiện một chút nghiên cứu về kỹ thuật trên (hãy xem bài viết này), bạn sẽ thấy rằng sử dụng chức năng sắp xếp tùy chỉnh là thiếu sót (mặc dù tôi có thể đưa ra câu trả lời dứt khoát về lý do tại sao!).

Nếu bạn cần xáo trộn một mảng và có phân phối các mặt hàng thực sự ngẫu nhiên, bạn cần thực hiện thuật toán Fisher-Yates.

Thuật toán Fisher-Yates

May mắn cho chúng tôi, nó không quá phức tạp:

const shuffleArray = array => {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    const temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
}

Nhập chế độ FullScreenen EXIT Mode FullScreen

Vì chức năng chúng tôi chuyển sang .sort() đang tìm kiếm một số dương hoặc âm để di chuyển vật phẩm 'lên' hoặc 'xuống' trong mảng .

Điều này hoạt động cho một cách tiếp cận thô sơ và sẵn sàng nhưng có thể không cung cấp cho bạn một sự xáo trộn thực sự ngẫu nhiên.

Làm thế nào để bạn xáo trộn trong JavaScript?

Cách đầu tiên và đơn giản nhất để xáo trộn một mảng trong JavaScript là cung cấp một hàm tùy chỉnh cho một .sort ().const mảng = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];const shuffledArray = mảng.Sắp xếp ((a, b) => 0,5 - toán học.provide a custom function to a . sort() . const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const shuffledArray = array. sort((a, b) => 0.5 - Math.

Làm thế nào để bạn xáo trộn các đối tượng trong một mảng?

Mảng xáo trộn bằng cách sử dụng lớp ngẫu nhiên, chúng ta có thể lặp lại thông qua các phần tử mảng trong một vòng lặp.Sau đó, chúng tôi sử dụng lớp ngẫu nhiên để tạo số chỉ mục ngẫu nhiên.Sau đó hoán đổi phần tử chỉ mục hiện tại với phần tử chỉ mục được tạo ngẫu nhiên.Ở cuối vòng lặp, chúng ta sẽ có một mảng bị xáo trộn ngẫu nhiên.iterate through the array elements in a for loop. Then, we use the Random class to generate a random index number. Then swap the current index element with the randomly generated index element. At the end of the for loop, we will have a randomly shuffled array.

Làm thế nào để bạn ngẫu nhiên một danh sách trong java?

Shuffle (danh sách) để xáo trộn danh sách với thư viện hoặc bộ sưu tập Java tiêu chuẩn.Shuffle (mảng. ASLIST (A)) để xáo trộn các mục trong một mảng. to shuffle a list with the standard Java library or Collections. shuffle(Arrays. asList(a)) to shuffle the entries in an array .

Chức năng xáo trộn là gì?

Định nghĩa và sử dụng hàm shuffle () ngẫu nhiên thứ tự của các phần tử trong mảng.Hàm này gán các khóa mới cho các phần tử trong mảng.Các khóa hiện tại sẽ được xóa (xem ví dụ bên dưới).randomizes the order of the elements in the array. This function assigns new keys for the elements in the array. Existing keys will be removed (See Example below).