Trong bài này chúng ta sẽ tìm hiểu hàm sort trong javascript, đây là hàm dùng để sắp xếp các phần tử trong chính mảng đó, đồng thời sẽ kết quả đã sắp xếp đó vào một mảng mới.
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.
Thứ tự sắp xếp mặc định được tính là tăng dần. Tuy nhiên, bạn có thể can thiệp vào quá trình sắp xếp bằng cách truyền vào nó một hàm callback. Trước khi đi vào học cú pháp thì hãy xem ví dụ dưới đây.
array.sort[]
const months = ['March', 'Jan', 'Feb', 'Dec']; months.sort[]; console.log[months]; // output: Array ["Dec", "Feb", "Jan", "March"] const array1 = [1, 30, 4, 21, 100000]; array1.sort[]; console.log[array1]; // output: Array [1, 100000, 21, 30, 4]
1. Hàm sort trong javascript là gì?
Hàm sort là một method thuộc đối tượng array trong javascript, được đùng dể sắp xếp các phần tử trong mảng tăng dần hoặc giảm dần theo số thứ tự trong bảng mã ascii, hoặc theo quy tắc trong callback function.
- Mặc định các phần tử sẽ được sắp xếp theo bảng chữ cái với thứ tự tăng dần, điều này khiến phương thức sort sẽ sắp xếp các chuỗi rất chính xác. Tuy nhiên, khi sắp xếp các số sẽ không được chính xác [ví dụ 20 và 100 thì 20 sẽ lớn hơn 100 vì 2 > 1].
- Bạn có thể khắc phục điều này bằng việc truyền tham số là một mảng so sánh.
- Hàm sort sẽ làm thay đổi mảng ban đầu.
Cú pháp sort javascript như sau:
Bài viết này được đăng tại [free tuts .net]
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]
Trong đó: const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort[]; // Apple,Banana,Mango,Orange
4 là tham số không bắt buộc. Đây là một callback function dùng để quyết định thứ tự sắp xếp của các phần tử trong mảng. Hai tham số const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort[]; // Apple,Banana,Mango,Orange
5 và const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort[]; // Apple,Banana,Mango,Orange
6 đại diện cho hai phần tử kề nhau trong mảng, và ta sẽ sử dụng nó để quyết định cách sắp xếp.
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 là tham số không bắt buộc. Đây là một callback function dùng để quyết định thứ tự sắp xếp của các phần tử trong mảng. Hai tham số
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange5 và
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange6 đại diện cho hai phần tử kề nhau trong mảng, và ta sẽ sử dụng nó để quyết định cách sắp xếp.
- Nếu hàm callback trả về số lớn hơn 0 thì
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange
6 sẽ đứng trướcconst fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange
5. - Nếu hàm callback trả về số bé hơn hoặc bằng 0 thì thứ tự được giữ nguyên, tức là
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange
5 sẽ đứng trướcconst fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange
6.
2. Các ví dụ hàm array sort trong javascript
Ví dụ 1: Trường hợp sắp xếp với chuỗi.: Trường hợp sắp xếp với chuỗi.
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange
Ví dụ 2: Trường hợp sắp xếp với số.: Trường hợp sắp xếp với số.
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]
Như bạn thấy, kết quả trả về là sai, bởi hàm sort nó hiểu giữa hai số 3 và 10 thì 3 lớn hơn 1, vì vậy 3 sẽ đứng sau 10.
Để khắc phục thì ta sẽ sử dụng callback function như sau:
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]
Ví dụ 3: Sử dụng hàm sort để so sánh một mảng với các phần tử là các chuỗi.: Sử dụng hàm sort để so sánh một mảng với các phần tử là các chuỗi.
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }
Ví dụ 4: Sử dụng tham số compareFn.: Sử dụng tham số compareFn.
Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }
Như vậy là mình đã hướng dẫn xong cách sử dụng hàm sort trong javascript để sắp xếp mảng tăng dần trong javascript. Hẹn gặp lại các bạn ở các bài tiêp theo nhé.
Phương thức var score = [700, 8, 9, 10, 3];
console.log[score.sort[]];
// Keets Kết quả: [10, 3, 700, 8, 9]
1 sắp xếp các phần tử của một mảng tại chỗ và trả về tham chiếu đến cùng một mảng, hiện được sắp xếp. Thứ tự sắp xếp mặc định là tăng dần, được xây dựng khi chuyển đổi các yếu tố thành các chuỗi, sau đó so sánh các chuỗi các giá trị đơn vị mã UTF-16 của chúng.var score = [700, 8, 9, 10, 3];
console.log[score.sort[]];
// Keets Kết quả: [10, 3, 700, 8, 9]
1 method sorts the elements of an array in place and returns the reference to the same array, now sorted. The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units values.
Độ phức tạp về thời gian và không gian của loại không thể được đảm bảo vì nó phụ thuộc vào việc thực hiện.
Thử nó
Cú pháp
// Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
Thông số
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 Tùy chọnOptional
Chỉ định một hàm xác định thứ tự sắp xếp. Nếu bị bỏ qua, các phần tử mảng được chuyển đổi thành các chuỗi, sau đó được sắp xếp theo giá trị điểm mã Unicode của mỗi ký tự.
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3
Yếu tố đầu tiên để so sánh.
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4
Yếu tố thứ hai để so sánh.
Giá trị trả về
Các tham chiếu đến mảng ban đầu, bây giờ được sắp xếp. Lưu ý rằng mảng được sắp xếp tại chỗ và không có bản sao nào được thực hiện.
Sự mô tả
Nếu
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 không được cung cấp, tất cả các phần tử không phải là -____ 36 được sắp xếp bằng cách chuyển đổi chúng thành các chuỗi và so sánh các chuỗi theo thứ tự đơn vị mã UTF-16. Ví dụ: "chuối" đến trước "anh đào". Trong một loại số, 9 đến trước 80, nhưng vì các số được chuyển đổi thành chuỗi, "80" xuất hiện trước "9" theo thứ tự Unicode. Tất cả các phần tử
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]6 được sắp xếp đến cuối mảng.
Phương pháp
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1 bảo tồn các khe trống. Nếu mảng nguồn thưa thớt, các khe trống được di chuyển đến cuối mảng và luôn luôn đến sau tất cả
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]6.
Lưu ý: Trong UTF -16, các ký tự Unicode trên var score = [700, 8, 9, 10, 3];
console.log[score.sort[ [firstEl, secondEl] => {
if [secondEl > firstEl]{
return -1;
}
else {
return 0;
}
} ]];
// Kết quả: [3, 8, 9, 10, 700]
0 được mã hóa dưới dạng hai đơn vị mã thay thế, của phạm vi var score = [700, 8, 9, 10, 3];
console.log[score.sort[ [firstEl, secondEl] => {
if [secondEl > firstEl]{
return -1;
}
else {
return 0;
}
} ]];
// Kết quả: [3, 8, 9, 10, 700]
1 - var score = [700, 8, 9, 10, 3];
console.log[score.sort[ [firstEl, secondEl] => {
if [secondEl > firstEl]{
return -1;
}
else {
return 0;
}
} ]];
// Kết quả: [3, 8, 9, 10, 700]
2. Giá trị của mỗi đơn vị mã được đưa riêng biệt để so sánh. Do đó, ký tự được hình thành bởi cặp thay thế var score = [700, 8, 9, 10, 3];
console.log[score.sort[ [firstEl, secondEl] => {
if [secondEl > firstEl]{
return -1;
}
else {
return 0;
}
} ]];
// Kết quả: [3, 8, 9, 10, 700]
3 sẽ được sắp xếp trước ký tự var score = [700, 8, 9, 10, 3];
console.log[score.sort[ [firstEl, secondEl] => {
if [secondEl > firstEl]{
return -1;
}
else {
return 0;
}
} ]];
// Kết quả: [3, 8, 9, 10, 700]
4. In UTF-16, Unicode characters above
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]0 are encoded as two surrogate code units, of the range
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]1 -
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]2. The value of each code unit is taken separately into account for the comparison. Thus the character formed by the surrogate pair
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]3 will be sorted before the character
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]4.
Nếu
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 được cung cấp, tất cả các phần tử không phải là -____ 36 được sắp xếp theo giá trị trả về của hàm so sánh [tất cả các phần tử
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]6 được sắp xếp đến cuối mảng, không có lệnh gọi đến
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4].
> 0 | Sắp xếp var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3 sau var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4 |
< 0 | Sắp xếp var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3 trước var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4 |
=== 0 | Giữ thứ tự ban đầu của var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3 và var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4 |
Vì vậy, hàm so sánh có dạng sau:
function compareFn[a, b] {
if [a is less than b by some ordering criterion] {
return -1;
}
if [a is greater than b by the ordering criterion] {
return 1;
}
// a must be equal to b
return 0;
}
Chính thức hơn, bộ so sánh dự kiến sẽ có các thuộc tính sau, để đảm bảo hành vi sắp xếp thích hợp:
- Tinh khiết: Bộ so sánh không làm biến đổi các đối tượng được so sánh hoặc bất kỳ trạng thái bên ngoài nào. .
- Ổn định: Bộ so sánh trả về kết quả tương tự với cùng một cặp đầu vào.
- Phản xạ:
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }
6. - Anti-symetric:
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]
9 vàRun var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }
8 phải làRun var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }
9 hoặc có các dấu hiệu ngược lại. - Transitive: Nếu
var score = [700, 8, 9, 10, 3]; console.log[score.sort[ [firstEl, secondEl] => { if [secondEl > firstEl]{ return -1; } else { return 0; } } ]]; // Kết quả: [3, 8, 9, 10, 700]
9 vàRun var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }
1 cả hai đều dương, bằng không hoặc âm, thìRun var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }
2 có tính tích cực giống như hai trước đó.
Một bộ so sánh phù hợp với các ràng buộc ở trên sẽ luôn có thể trả lại tất cả các
Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }3,
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9 và
Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }5 hoặc liên tục trả lại
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9. Ví dụ: nếu một bộ so sánh chỉ trả về
Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }3 và
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9, hoặc chỉ trả về
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9 và
Run5, thì nó sẽ không thể sắp xếp một cách đáng tin cậy vì chống đối xứng. Một bộ so sánh luôn trả vềvar subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9 sẽ khiến mảng không được thay đổi, nhưng dù sao cũng đáng tin cậy.
Bộ so sánh từ vựng mặc định thỏa mãn tất cả các ràng buộc ở trên.
Để so sánh các số thay vì các chuỗi, hàm so sánh có thể trừ
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4 từ
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3. Hàm sau sẽ sắp xếp mảng theo thứ tự tăng dần [nếu nó không chứa
// Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
4 và // Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
5]:function compareNumbers[a, b] {
return a - b;
}
Phương pháp
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1 là chung chung. Nó chỉ mong đợi giá trị
// Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
7 sẽ có thuộc tính // Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
8 và các thuộc tính được khóa. Mặc dù các chuỗi cũng giống như mảng, phương pháp này không phù hợp để được áp dụng trên chúng, vì các chuỗi là bất biến.Ví dụ
Tạo, hiển thị và sắp xếp một mảng
Ví dụ sau đây tạo ra bốn mảng và hiển thị mảng gốc, sau đó các mảng được sắp xếp. Các mảng số được sắp xếp mà không có hàm so sánh, sau đó được sắp xếp bằng một.
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]0
Sắp xếp mảng các đối tượng
Mảng các đối tượng có thể được sắp xếp bằng cách so sánh giá trị của một trong các thuộc tính của chúng.
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]1
Sắp xếp các ký tự không phải là ASCII
Để sắp xếp các chuỗi với các ký tự không phải ASCII, tức là các chuỗi có các ký tự có dấu [E, é, è, A, ä, v.v.], các chuỗi từ các ngôn ngữ khác ngoài tiếng Anh, sử dụng
// Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
9. Hàm này có thể so sánh các ký tự đó để chúng xuất hiện theo đúng thứ tự.// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]2
Sắp xếp với bản đồ
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 có thể được gọi nhiều lần cho mỗi phần tử trong mảng. Tùy thuộc vào bản chất của ____ 24, điều này có thể mang lại chi phí cao. Càng nhiều công việc mà
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 thực hiện và càng có nhiều yếu tố để sắp xếp, có thể sử dụng
function compareFn[a, b] {
if [a is less than b by some ordering criterion] {
return -1;
}
if [a is greater than b by the ordering criterion] {
return 1;
}
// a must be equal to b
return 0;
}
3 hiệu quả hơn để sắp xếp. Ý tưởng là đi qua mảng một lần để trích xuất các giá trị thực tế được sử dụng để sắp xếp thành một mảng tạm thời, sắp xếp mảng tạm thời và sau đó đi qua mảng tạm thời để đạt được thứ tự đúng.// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]3
Có một thư viện nguồn mở có sẵn gọi là Mapsort áp dụng phương pháp này.
Sắp xếp [] trả về tham chiếu đến cùng một mảng
Phương thức
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1 trả về một tham chiếu đến mảng gốc, do đó, việc biến đổi mảng được trả về cũng sẽ biến đổi mảng gốc.
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]4
Trong trường hợp bạn muốn
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1 không thay đổi mảng gốc, nhưng trả về một mảng được sao chép nông như các phương thức mảng khác [ví dụ:
function compareFn[a, b] {
if [a is less than b by some ordering criterion] {
return -1;
}
if [a is greater than b by the ordering criterion] {
return 1;
}
// a must be equal to b
return 0;
}
3], bạn có thể thực hiện một bản sao nông trước khi gọi var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1, sử dụng cú pháp lan truyền hoặc
function compareFn[a, b] {
if [a is less than b by some ordering criterion] {
return -1;
}
if [a is greater than b by the ordering criterion] {
return 1;
}
// a must be equal to b
return 0;
}
8.// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]5
Sắp xếp sự ổn định
Kể từ phiên bản 10 [hoặc ECMAScript 2019], đặc điểm kỹ thuật chỉ ra rằng
function compareFn[a, b] {
if [a is less than b by some ordering criterion] {
return -1;
}
if [a is greater than b by the ordering criterion] {
return 1;
}
// a must be equal to b
return 0;
}
9 ổn định.Ví dụ, giả sử bạn có một danh sách các học sinh cùng với các lớp của họ. Lưu ý rằng danh sách học sinh đã được sắp xếp trước bằng tên theo thứ tự bảng chữ cái:
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]6
Sau khi sắp xếp mảng này theo
function compareNumbers[a, b] {
return a - b;
}
0 theo thứ tự tăng dần:// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]7
Biến
function compareNumbers[a, b] {
return a - b;
}
1 sau đó sẽ có giá trị sau:// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]8
Điều quan trọng cần lưu ý là các sinh viên có cùng lớp [ví dụ: Alex và Devlin], sẽ vẫn theo cùng thứ tự như trước khi gọi loại. Đây là những gì một thuật toán sắp xếp ổn định đảm bảo.
Trước phiên bản 10 [hoặc Ecmascript 2019], sự ổn định sắp xếp không được đảm bảo, có nghĩa là bạn có thể kết thúc với các điều sau:
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]9
Sắp xếp với bộ so sánh không được hình thành
Nếu một chức năng so sánh không thỏa mãn tất cả các quy tắc tinh khiết, ổn định, phản xạ, chống đối xứng và chuyển tiếp, như được giải thích trong mô tả, hành vi của chương trình không được xác định rõ.
Ví dụ, hãy xem xét mã này:
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange0
Hàm
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 ở đây không được hình thành tốt, bởi vì nó không thỏa mãn tính đối xứng: nếu
function compareNumbers[a, b] {
return a - b;
}
3, nó sẽ trả về Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }3; Nhưng bằng cách hoán đổi
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]3 và
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]4, nó trả về
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9 thay vì giá trị âm. Do đó, mảng kết quả sẽ khác nhau trên các động cơ. Ví dụ: V8 [được sử dụng bởi Chrome, Node.js, v.v.] và JavaScriptcore [được Safari sử dụng] sẽ không sắp xếp mảng và trả về
function compareNumbers[a, b] {
return a - b;
}
8, trong khi Spidermonkey [được sử dụng bởi Firefox] sẽ trả về mảng được sắp xếp tăng dần, vì function compareNumbers[a, b] {
return a - b;
}
9 .Tuy nhiên, nếu hàm
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange4 được thay đổi một chút để nó trả về
Run var subject = [4, 144, 25, 16]; document.getElementById["demo"].innerHTML = subject; function compare[a, b] { return a - b; } function myFunction[] { subject.sort[compare]; document.getElementById["demo"].innerHTML = subject; }5 hoặc
Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9:
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange1
Sau đó, V8 và JavaScriptCore sắp xếp nó xuống, như
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]03, trong khi Spidermonkey trả lại nó như:
function compareNumbers[a, b] {
return a - b;
}
8.Do sự không nhất quán thực hiện này, bạn luôn được khuyên nên làm cho bộ so sánh của bạn được định dạng tốt bằng cách tuân theo năm ràng buộc.
Sử dụng sort [] trên các mảng thưa thớt
Các khe trống được di chuyển đến cuối mảng.
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange2
Gọi Sắp xếp [] trên các đối tượng không phải là
Phương pháp
var score = [700, 8, 9, 10, 3]; console.log[score.sort[]]; // Keets Kết quả: [10, 3, 700, 8, 9]1 đọc thuộc tính
// Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
8 của // Functionless
sort[]
// Arrow function
sort[[a, b] => { /* … */ } ]
// Compare function
sort[compareFn]
// Inline compare function
sort[function compareFn[a, b] { /* … */ }]
7. Sau đó, nó thu thập tất cả các thuộc tính khóa nguyên hiện có trong phạm vi Run var subject = ["php", "javascript", "css", "html"]; document.getElementById["demo"].innerHTML = subject; function myFunction[] { subject.sort[]; document.getElementById["demo"].innerHTML = subject; }9 đến
// Functionless array.sort[] // Arrow function array.sort[[firstEl, secondEl] => { ... } ] // Compare function array.sort[compareFn] // Inline compare function array.sort[function compareFn[firstEl, secondEl] { ... }]09, sắp xếp chúng và viết lại chúng. Nếu có các thuộc tính bị thiếu trong phạm vi, các thuộc tính theo dõi tương ứng sẽ bị xóa, như thể các thuộc tính không tồn tại được sắp xếp vào cuối.
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort[]; // Apple,Banana,Mango,Orange3
Thông số kỹ thuật
Đặc tả ngôn ngữ Ecmascript # sec-array.prototype.sort # sec-array.prototype.sort |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt