Hướng dẫn random number not repeat javascript - số ngẫu nhiên không lặp lại javascript

Nếu tôi hiểu đúng thì bạn chỉ đang tìm kiếm một hoán vị (nghĩa là các số được chọn ngẫu nhiên không có lặp lại) của các số 1-10? Có thể thử tạo một danh sách ngẫu nhiên của những con số đó, một lần, khi bắt đầu, và sau đó chỉ cần làm việc theo cách của bạn thông qua những thứ đó?

Điều này sẽ tính toán một hoán vị ngẫu nhiên của các số trong

nums = [2,4,6,8,10,12,14,16,18,20];
0:

var nums = [1,2,3,4,5,6,7,8,9,10],
    ranNums = [],
    i = nums.length,
    j = 0;

while (i--) {
    j = Math.floor(Math.random() * (i+1));
    ranNums.push(nums[j]);
    nums.splice(j,1);
}

Vì vậy, ví dụ, nếu bạn đang tìm kiếm các số ngẫu nhiên trong khoảng từ 1 - 20 cũng thậm chí, thì bạn có thể sử dụng:

nums = [2,4,6,8,10,12,14,16,18,20];

Sau đó, chỉ cần đọc qua

nums = [2,4,6,8,10,12,14,16,18,20];
1 để nhớ lại các số ngẫu nhiên.

Điều này không có rủi ro về việc nó ngày càng mất nhiều thời gian hơn để tìm những con số không sử dụng, như bạn đã tìm thấy trong cách tiếp cận của mình.

Chỉnh sửa: Sau khi đọc bài này và chạy thử nghiệm trên JSPERF, có vẻ như một cách tốt hơn nhiều để làm điều này là một Fisher, Yates Shuffle:: After reading this and running a test on jsperf, it seems like a much better way of doing this is a Fisher–Yates Shuffle:

function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {

        j = Math.floor(Math.random() * (i+1));

        // swap randomly chosen element with current element
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;

    }

    return array;
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

Về cơ bản, nó hiệu quả hơn bằng cách tránh sử dụng các hoạt động mảng 'đắt tiền'.

Chỉnh sửa tiền thưởng: Một khả năng khác là sử dụng máy phát điện (giả sử bạn có hỗ trợ):: Another possibility is using generators (assuming you have support):

function* shuffle(array) {

    var i = array.length;

    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0];
    }

}

Sau đó để sử dụng:

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

ranNums.next().value;    // first random number from array
ranNums.next().value;    // second random number from array
ranNums.next().value;    // etc.

Trong đó

nums = [2,4,6,8,10,12,14,16,18,20];
2 cuối cùng sẽ đánh giá đến
nums = [2,4,6,8,10,12,14,16,18,20];
3 sau khi bạn chạy qua tất cả các yếu tố trong mảng bị xáo trộn.

Nhìn chung, điều này sẽ không hiệu quả như Fisher, Yates Shuffle vì bạn vẫn còn ____ 14-ing một mảng. Nhưng sự khác biệt là bây giờ bạn chỉ làm công việc đó khi bạn cần thay vì thực hiện tất cả, vì vậy tùy thuộc vào trường hợp sử dụng của bạn, điều này có thể tốt hơn.

Hướng dẫn random number not repeat javascript - số ngẫu nhiên không lặp lại javascript

Backstory: Khi tôi đang thực hiện một trong những dự án phụ của mình, một trong những nhiệm vụ là hiển thị ảnh từ API hủy bỏ trong nhiều thẻ. Mục tiêu là chọn ảnh ngẫu nhiên mà không lặp lại chúng. Tôi đã sử dụng

nums = [2,4,6,8,10,12,14,16,18,20];
5 cũ để chọn ảnh ngẫu nhiên từ phản hồi của API. Nhưng vấn đề là thường có ít con số lặp lại, do đó có cùng một hình ảnh trong các thẻ khác nhau. when I was doing one of my side projects, one of the tasks was to display photos from Unspash API in multiple cards. Goal was to pick photos randomly without repeating them. I used good old
nums = [2,4,6,8,10,12,14,16,18,20];
5 to randomly pick photos from API's response. But the problem was that often few numbers were repeating, thus there were the same pictures in different cards.

Giả sử bạn muốn tạo 5 số duy nhất ngẫu nhiên từ 1 đến 10. Cơ hội lớn mà bạn sẽ nhận được ít nhất một số lặp lại.

Giải pháp cho nhiệm vụ này là thay thế từng số được chọn (ngẫu nhiên) trong mảng bằng một số không được sử dụng khác.

Trong mã, đây sẽ là một cái gì đó như thế này:

function randomUniqueNum(range, outputCount) {

  let arr = []
  for (let i = 1; i <= range; i++) {
    arr.push(i)
  }

  let result = [];

  for (let i = 1; i <= outputCount; i++) {
    const random = Math.floor(Math.random() * (range - i));
    result.push(arr[random]);
    arr[random] = arr[range - i];
  }

  return result;
}

Nhập chế độ FullScreenen EXIT Mode FullScreen

Hãy xem từng dòng. Chức năng mất phạm vi, và số đầu ra. Chẳng hạn

nums = [2,4,6,8,10,12,14,16,18,20];
6 Đầu tiên chúng tôi tạo mảng từ 1 đến 10
Function takes range, and output count.
For instance
nums = [2,4,6,8,10,12,14,16,18,20];
6
First we generate array from 1 to 10

 let arr = []
  for (let i = 1; i <= 10; i++) {
    arr.push(i)
  }

Nhập chế độ FullScreenen EXIT Mode FullScreen

nums = [2,4,6,8,10,12,14,16,18,20];
7

Hãy xem từng dòng. Chức năng mất phạm vi, và số đầu ra. Chẳng hạn

nums = [2,4,6,8,10,12,14,16,18,20];
6 Đầu tiên chúng tôi tạo mảng từ 1 đến 10
Iterations in this loop equals to output count, in this case to 5.
Then we generate random number:

const random = Math.floor(Math.random() * (range - i))

Nhập chế độ FullScreenen EXIT Mode FullScreen

Hãy xem từng dòng. Chức năng mất phạm vi, và số đầu ra. Chẳng hạn

nums = [2,4,6,8,10,12,14,16,18,20];
6 Đầu tiên chúng tôi tạo mảng từ 1 đến 10
Then using this random number as index in
nums = [2,4,6,8,10,12,14,16,18,20];
8 we push it to the result array:

result.push(arr[random])

Nhập chế độ FullScreenen EXIT Mode FullScreen

Hãy xem từng dòng. Chức năng mất phạm vi, và số đầu ra. Chẳng hạn

nums = [2,4,6,8,10,12,14,16,18,20];
6 Đầu tiên chúng tôi tạo mảng từ 1 đến 10

arr[random] = arr[range - i]

Nhập chế độ FullScreenen EXIT Mode FullScreen

Hãy xem từng dòng. Chức năng mất phạm vi, và số đầu ra. Chẳng hạn

nums = [2,4,6,8,10,12,14,16,18,20];
6 Đầu tiên chúng tôi tạo mảng từ 1 đến 10

Sau đó, chúng tôi sử dụng một vòng lặp khác để chọn số từ mảng này. Các lần lặp trong vòng lặp này bằng với số lượng đầu ra, trong trường hợp này là 5. Sau đó, chúng tôi tạo số ngẫu nhiên:
At the end we just return array of unique random numbers.

Mỗi lần lặp chúng tôi giảm phạm vi 1. Sau đó sử dụng số ngẫu nhiên này làm chỉ mục trong

nums = [2,4,6,8,10,12,14,16,18,20];
8, chúng tôi đẩy nó vào mảng kết quả:

Làm thế nào để bạn tạo ra một số ngẫu nhiên mà không cần lặp lại?

Tạo danh sách số ngẫu nhiên không có bản sao trong Excel..
Chọn ô B3 và nhấp vào nó ..
Chèn công thức: = randbetween (10,30).
Nhấn Enter..
Kéo công thức xuống các ô khác trong cột bằng cách nhấp và kéo biểu tượng nhỏ++ở phía dưới bên phải của ô ..

Làm thế nào để bạn tạo ra một số ngẫu nhiên mà không cần lặp lại trong Java?

int number = ngẫu nhiên.nextint (int minbound, int maxbound);Thêm số được tạo vào tập hợp vì tập hợp không cho phép sao chép giá trị. nextInt(int minbound,int maxbound); add the generated number into set because set doesn't allow duplicates value.

Làm thế nào để bạn tạo ra một số ngẫu nhiên trong JavaScript?

Tạo JavaScript Số ngẫu nhiên JavaScript tạo số giả ngẫu nhiên với hàm Math.random ().Hàm này không có tham số và tạo số thập phân ngẫu nhiên từ 0 đến 1. Giá trị trả về có thể là 0, nhưng nó sẽ không bao giờ là 1.Math. random() . This function takes no parameters and creates a random decimal number between 0 and 1. The returned value may be 0, but it will never be 1.

Làm thế nào để bạn làm tròn một số ngẫu nhiên trong JavaScript?

tầng (math.random ());Toán học.Phương thức sàn () sẽ làm tròn số thập phân ngẫu nhiên xuống toàn bộ số gần nhất (hoặc số nguyên). random()); The Math. floor() method will round down the random decimal number to the nearest whole number (or integer).