Trái ngược với các ngôn ngữ như Ruby và PHP, JavaScript không có phương thức tích hợp sẵn để xáo trộn mảng. Tuy nhiên, có một phương pháp cho phép xáo trộn trình tự. Hãy thảo luận về một trường hợp cụ thể
Ví dụ, chúng ta có mảng sau
chức năng ngẫu nhiên hóa [giá trị] { hãy để chỉ mục = giá trị. chiều dài, chỉ số ngẫu nhiên; . trong khi [chỉ số. = 0] { // Chọn phần tử còn lại. Random Index = Toán học. tầng [Toán. ngẫu nhiên [] * chỉ mục]; . [giá trị[chỉ số], giá trị[chỉ số ngẫu nhiên]] = [ giá trị[chỉ số ngẫu nhiên], giá trị[chỉ số]]; . nhật ký [mảng];
Xáo trộn một mảng các giá trị được coi là một trong những vấn đề lâu đời nhất trong khoa học máy tính. Có thể xáo trộn với thuật toán xáo trộn để tạo một hoán vị ngẫu nhiên của một chuỗi hữu hạn. Điều đó có nghĩa là, thuật toán xáo trộn trình tự
Richard Durstenfeld giới thiệu phiên bản hiện đại của Fisher-Yates shuffle được thiết kế để sử dụng máy tính
hàm shuffleArray[mảng] { let curId = mảng. chiều dài; . == curId] { // Chọn phần tử còn lại let randId = Math. tầng [Toán. ngẫu nhiên [] * curId]; . hãy để tmp = mảng [curId]; . nhật ký [mảng];
Trường hợp code bằng ES6/ECMAScript 2015 cho phép gán 2 biến ngay lập tức thì code sẽ ngắn hơn
hàm shuffleArray[arr] { for [hãy i = mảng. chiều dài - 1; . tầng [Toán. ngẫu nhiên[] * [i + 1]]; . nhật ký [mảng];
hàm shuffleArray [mảng] { mảng. sắp xếp [[] => Toán học. ngẫu nhiên[] - 0. 5]; . nhật ký [mảng]
Lớp mảng JavaScript được sử dụng để xây dựng các mảng, là các đối tượng cấp cao và giống như danh sách. Mảng có thể được sử dụng để lưu trữ một số giá trị trong một biến duy nhất. Một mảng có thể được mô tả như một biến duy nhất có khả năng chứa nhiều hơn một giá trị cùng một lúc
Mỗi mục có một số gắn liền với nó được gọi là chỉ mục số cho phép bạn truy cập nó. Mảng JavaScript bắt đầu từ chỉ số 0 và được thao tác bằng các phương thức khác nhau
Phương thức chấp nhận một hàm so sánh và thực hiện sắp xếp dựa trên giá trị được trả về bởi hàm đó
Hàm so sánh được thực thi trên mọi phần tử trong mảng của bạn. Thông thường, hai phần tử của mảng được truyền làm đối số cho hàm như thế này
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
Nhưng vì bạn không sử dụng các phần tử trong thân hàm nên bạn có thể bỏ qua các đối số
Quy tắc của phương thức
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 là khi hàm so sánh trả về numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
1 thì phần tử numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 được đặt trước numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
1Khi hàm trả về giá trị
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
2 thì numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 được đặt sau numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
1Xem xét các ví dụ sau
// Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
Phương thức
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
5 trả về một số ngẫu nhiên trong khoảng từ numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
6 đến numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
7Khi bạn trả về
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
8 từ phương thức numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0, điều đó có nghĩa là phương thức sẽ trả về một số ngẫu nhiên trong khoảng từ // Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
0 đến // Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
1Điều này làm cho phương thức
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 thực hiện sắp xếp ngẫu nhiên, xáo trộn các phần tử trong mảng của bạn mà không có bất kỳ mẫu rõ ràng nàoVà đó là cách bạn có thể xáo trộn một mảng bằng JavaScript
Bạn có thể rút ngắn hàm thành một lớp lót bằng cú pháp hàm mũi tên như sau
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
3Phương thức
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 ở trên sắp xếp lại mảng một cách ngẫu nhiên mỗi khi bạn chạy mãBạn cũng có thể viết một hàm JavaScript có tên là
// Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
4 bằng cách sử dụng phương thức numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 như saunumbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
5Hàm
// Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
6 chấp nhận một // Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
7 làm đối số của nó và trả về một mảng đã xáo trộn từ // Example 1: a after b
let pair = [17, 99]; // a, b
console.log[pair.sort[[] => -1]];
// [99, 17] // b, a
// Example 2: a before b
let anotherPair = [27, 5]; // a, b
console.log[anotherPair.sort[[] => 1]];
// [27, 5] // a, b
7 đã choXin lưu ý rằng phương thức
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
0 sửa đổi mảng ban đầuNếu bạn muốn giữ lại mảng ban đầu, thì bạn cần sử dụng toán tử trải rộng [
numbers.sort[function [a, b] {
return Math.random[] - 0.5;
}];
30] để tạo một bản sao nông của mảng