Baseline Widely available
СводкаÐеÑод sort()
на меÑÑе ÑоÑÑиÑÑÐµÑ ÑлеменÑÑ Ð¼Ð°ÑÑива и возвÑаÑÐ°ÐµÑ Ð¾ÑÑоÑÑиÑованнÑй маÑÑив. СоÑÑиÑовка не обÑзаÑелÑно ÑÑÑойÑива (англ.). ÐоÑÑдок ÑоÑÑиÑовки по ÑмолÑÐ°Ð½Ð¸Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¿Ð¾ÑÑÐ´ÐºÑ ÐºÐ¾Ð´Ð¾Ð²ÑÑ
ÑоÑек Unicode.
arr.sort([compareFunction])ÐаÑамеÑÑÑ
compareFunction
ÐеобÑзаÑелÑнÑй паÑамеÑÑ. УказÑÐ²Ð°ÐµÑ ÑÑнкÑиÑ, опÑеделÑÑÑÑÑ Ð¿Ð¾ÑÑдок ÑоÑÑиÑовки. ÐÑли опÑÑен, маÑÑив ÑоÑÑиÑÑеÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñо знаÑениÑми кодовÑÑ ÑоÑек каждого Ñимвола Unicode, полÑÑеннÑÑ Ð¿ÑÑÑм пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа в ÑÑÑокÑ.
ÐÑÑоÑÑиÑованнÑй маÑÑив. Ðажно, ÑÑо ÐºÐ¾Ð¿Ð¸Ñ Ð¼Ð°ÑÑива не ÑоздаÑÑÑÑ - маÑÑив ÑоÑÑиÑÑеÑÑÑ Ð½Ð° меÑÑе.
ÐпиÑаниеÐÑли ÑÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ compareFunction
не пÑедоÑÑавлÑеÑÑÑ, ÑлеменÑÑ ÑоÑÑиÑÑÑÑÑÑ Ð¿ÑÑÑм пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ
в ÑÑÑоки и ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок в поÑÑдке ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð¾Ð²ÑÑ
ÑоÑек Unicode. ÐапÑимеÑ, Ñлово "ÐиÑнÑ" идÑÑ Ð¿ÐµÑед Ñловом "бананÑ". ÐÑи ÑиÑловой ÑоÑÑиÑовке, 9 идÑÑ Ð¿ÐµÑед 80, но поÑколÑÐºÑ ÑиÑла пÑеобÑазÑÑÑÑÑ Ð² ÑÑÑоки, Ñо "80" идÑÑ Ð¿ÐµÑед "9" в ÑооÑвеÑÑÑвии Ñ Ð¿Ð¾ÑÑдком в Unicode.
var fruit = ["аÑбÑзÑ", "бананÑ", "ÐиÑнÑ"];
fruit.sort(); // ['ÐиÑнÑ', 'аÑбÑзÑ', 'бананÑ']
var scores = [1, 2, 10, 21];
scores.sort(); // [1, 10, 2, 21]
var things = ["Ñлово", "Слово", "1 Слово", "2 Слова"];
things.sort(); // ['1 Слово', '2 Слова', 'Слово', 'Ñлово']
// Ð Unicode, ÑиÑла наÑ
одÑÑÑÑ Ð¿ÐµÑед бÑквами в веÑÑ
нем ÑегиÑÑÑе,
// а Ñе, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, пеÑед бÑквами в нижнем ÑегиÑÑÑе.
ÐÑли ÑÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ compareFunction
пÑедоÑÑавлена, ÑлеменÑÑ Ð¼Ð°ÑÑива ÑоÑÑиÑÑÑÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑм знаÑением. ÐÑли ÑÑавниваÑÑÑÑ Ð´Ð²Ð° ÑлеменÑа a
и b
, Ñо:
compareFunction(a, b)
менÑÑе 0, ÑоÑÑиÑовка поÑÑÐ°Ð²Ð¸Ñ a
по менÑÑÐµÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑÑ, Ñем b
, Ñо еÑÑÑ, a
идÑÑ Ð¿ÐµÑвÑм.compareFunction(a, b)
веÑнÑÑ 0, ÑоÑÑиÑовка оÑÑÐ°Ð²Ð¸Ñ a
и b
неизменнÑми по оÑноÑÐµÐ½Ð¸Ñ Ð´ÑÑг к дÑÑгÑ, но оÑÑоÑÑиÑÑÐµÑ Ð¸Ñ
по оÑноÑÐµÐ½Ð¸Ñ ÐºÐ¾ вÑем дÑÑгим ÑлеменÑам. ÐбÑаÑиÑе внимание: ÑÑандаÑÑ ECMAscript не гаÑанÑиÑÑÐµÑ Ð´Ð°Ð½Ð½Ð¾Ðµ поведение, и ÐµÐ¼Ñ ÑледÑÑÑ Ð½Ðµ вÑе бÑаÑзеÑÑ (напÑимеÑ, веÑÑии Mozilla по кÑайней меÑе, до 2003 года).compareFunction(a, b)
болÑÑе 0, ÑоÑÑиÑовка поÑÑÐ°Ð²Ð¸Ñ b
по менÑÑÐµÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑÑ, Ñем a
.compareFunction(a, b)
должна вÑегда возвÑаÑаÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ знаÑение Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнной паÑÑ ÑлеменÑов a
и b
. ÐÑли бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑледоваÑелÑнÑе ÑезÑлÑÑаÑÑ, поÑÑдок ÑоÑÑиÑовки бÑÐ´ÐµÑ Ð½Ðµ опÑеделÑн.ÐÑак, ÑÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑÑÑ ÑоÑмÑ:
function compare(a, b) {
if (a менÑÑе b по некоÑоÑÐ¾Ð¼Ñ ÐºÑиÑеÑÐ¸Ñ ÑоÑÑиÑовки) {
return -1;
}
if (a болÑÑе b по некоÑоÑÐ¾Ð¼Ñ ÐºÑиÑеÑÐ¸Ñ ÑоÑÑиÑовки) {
return 1;
}
// a должно бÑÑÑ ÑавнÑм b
return 0;
}
ÐÐ»Ñ ÑиÑлового ÑÑавнениÑ, вмеÑÑо ÑÑÑокового, ÑÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑÑо вÑÑиÑаÑÑ b
из a
. СледÑÑÑÐ°Ñ ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ ÑоÑÑиÑоваÑÑ Ð¼Ð°ÑÑив по возÑаÑÑаниÑ:
function compareNumbers(a, b) {
return a - b;
}
ÐеÑод sort
можно Ñдобно иÑполÑзоваÑÑ Ñ ÑÑнкÑионалÑнÑми вÑÑажениÑми (и замÑканиÑми):
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function (a, b) {
return a - b;
});
console.log(numbers); // [1, 2, 3, 4, 5]
ÐбÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¾ÑÑоÑÑиÑÐ¾Ð²Ð°Ð½Ñ Ð¿Ð¾ знаÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из ÑÐ²Ð¾Ð¸Ñ ÑвойÑÑв.
var items = [
{ name: "Edward", value: 21 },
{ name: "Sharpe", value: 37 },
{ name: "And", value: 45 },
{ name: "The", value: -12 },
{ name: "Magnetic" },
{ name: "Zeros", value: 37 },
];
items.sort(function (a, b) {
if (a.name > b.name) {
return 1;
}
if (a.name < b.name) {
return -1;
}
// a должно бÑÑÑ ÑавнÑм b
return 0;
});
ÐÑимеÑÑ ÐÑимеÑ: Ñоздание, оÑобÑажение и ÑоÑÑиÑовка маÑÑива
Ð ÑледÑÑÑем пÑимеÑе ÑоздаÑÑÑÑ ÑеÑÑÑе маÑÑива, ÑнаÑала оÑобÑажаеÑÑÑ Ð¿ÐµÑвонаÑалÑнÑй маÑÑив, а заÑем они ÑоÑÑиÑÑÑÑÑÑ. ЧиÑловÑе маÑÑÐ¸Ð²Ñ ÑоÑÑиÑÑÑÑÑÑ ÑнаÑала без, а поÑом Ñ ÑÑнкÑией ÑÑавнениÑ.
var stringArray = ["ÐолÑбаÑ", "ÐоÑбаÑаÑ", "ÐелÑга"];
var numericStringArray = ["80", "9", "700"];
var numberArray = [40, 1, 5, 200];
var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];
function compareNumbers(a, b) {
return a - b;
}
// Ñнова пÑедполагаем, ÑÑо ÑÑнкÑÐ¸Ñ Ð¿ÐµÑаÑи опÑеделена
console.log("stringArray:", stringArray.join());
console.log("СоÑÑиÑовка:", stringArray.sort());
console.log("numberArray:", numberArray.join());
console.log("СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ:", numberArray.sort());
console.log(
"СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers:",
numberArray.sort(compareNumbers),
);
console.log("numericStringArray:", numericStringArray.join());
console.log("СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ:", numericStringArray.sort());
console.log(
"СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers:",
numericStringArray.sort(compareNumbers),
);
console.log("mixedNumericArray:", mixedNumericArray.join());
console.log("СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ:", mixedNumericArray.sort());
console.log(
"СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers:",
mixedNumericArray.sort(compareNumbers),
);
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¿ÑоизведÑÑ ÑледÑÑÑий вÑвод. Ðак показÑÐ²Ð°ÐµÑ Ð²Ñвод, когда иÑполÑзÑеÑÑÑ ÑÑнкÑÐ¸Ñ ÑÑавнениÑ, ÑиÑла ÑоÑÑиÑÑÑÑÑÑ ÐºÐ¾ÑÑекÑно вне завиÑимоÑÑи Ð¾Ñ Ñого, ÑвлÑÑÑÑÑ Ð»Ð¸ они ÑобÑÑвенно ÑиÑлами или ÑÑÑоками Ñ ÑиÑлами.
stringArray: ÐолÑбаÑ,ÐоÑбаÑаÑ,ÐелÑга СоÑÑиÑовка: ÐелÑга,ÐолÑбаÑ,ÐоÑбаÑÐ°Ñ numberArray: 40,1,5,200 СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ: 1,200,40,5 СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers: 1,5,40,200 numericStringArray: 80,9,700 СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ: 700,80,9 СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers: 9,80,700 mixedNumericArray: 80,9,700,40,1,5,200 СоÑÑиÑовка без ÑÑнкÑии ÑÑавнениÑ: 1,200,40,5,700,80,9 СоÑÑиÑовка Ñ ÑÑнкÑией compareNumbers: 1,5,9,40,80,200,700ÐÑимеÑ: ÑоÑÑиÑовка не-ASCII Ñимволов
ÐÐ»Ñ ÑоÑÑиÑовки ÑÑÑок Ñ Ð½Ðµ-ASCII Ñимволами, Ñо еÑÑÑ ÑÑÑок Ñ Ñимволами акÑенÑа (e, é, è, a, ä и Ñ.д.), ÑÑÑок, Ñ ÑзÑками, оÑлиÑнÑми Ð¾Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого: иÑполÑзÑйÑе String.localeCompare
. ÐÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑÑавниваÑÑ ÑÑи ÑимволÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ ÑÑановилиÑÑ Ð² пÑавилÑном поÑÑдке.
var items = ["réservé", "premier", "cliché", "communiqué", "café", "adieu"];
items.sort(function (a, b) {
return a.localeCompare(b);
});
// items Ñавен ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
ÐÑимеÑ: ÑоÑÑиÑовка c помоÑÑÑ map
ФÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ (compareFunction)
Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑÑÑ Ð½ÐµÑколÑко Ñаз Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа в маÑÑиве. РзавиÑимоÑÑи Ð¾Ñ Ð¿ÑиÑÐ¾Ð´Ñ ÑÑнкÑии ÑÑавнениÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к вÑÑоким ÑаÑÑ
одам ÑеÑÑÑÑов. Чем более Ñложна ÑÑнкÑÐ¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ Ñем болÑÑе ÑлеменÑов ÑÑебÑеÑÑÑ Ð¾ÑÑоÑÑиÑоваÑÑ, Ñем ÑазÑмнее иÑполÑзоваÑÑ map Ð´Ð»Ñ ÑоÑÑиÑовки. ÐÐ´ÐµÑ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð¹Ñи маÑÑив один Ñаз, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð²Ð»ÐµÑÑ ÑакÑиÑеÑкие знаÑениÑ, иÑполÑзÑемÑе Ð´Ð»Ñ ÑоÑÑиÑовки, во вÑеменнÑй маÑÑив, оÑÑоÑÑиÑоваÑÑ Ð²ÑеменнÑй маÑÑив, а заÑем обойÑи вÑеменнÑй маÑÑив Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿ÑавилÑного поÑÑдка.
// маÑÑив Ð´Ð»Ñ ÑоÑÑиÑовки
var list = ["ÐелÑÑа", "алÑÑа", "ЧÐÐ ÐÐ", "бÑаво"];
// вÑеменнÑй маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¾Ð±ÑекÑÑ Ñ Ð¿Ð¾Ð·Ð¸Ñией и знаÑением ÑоÑÑиÑовки
var mapped = list.map(function (el, i) {
return { index: i, value: el.toLowerCase() };
});
// ÑоÑÑиÑÑем маÑÑив, ÑодеÑжаÑий ÑменÑÑеннÑе знаÑениÑ
mapped.sort(function (a, b) {
if (a.value > b.value) {
return 1;
}
if (a.value < b.value) {
return -1;
}
return 0;
});
// конÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ ÑезÑлÑÑа
var result = mapped.map(function (el) {
return list[el.index];
});
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4