我试图了解sort()的工作原理以及我应该如何使用它。
我做了一些研究(google)并在stackoverflow上查看了类似的问题,但仍然有一些事情不是100%清楚的。
所以到目前为止我的理解如下:
有:
不带参数的sort():仅对字符串值按字母顺序的简单数组进行排序,并在升序顺序< / p>
E.g。
// sort alphabetically and ascending:
var myArr=["Bob", "Bully", "Amy"]
myArr.sort() // Array now becomes ["Amy", "Bob", "Bully"]
使用函数作为参数的sort():根据数组属性对数组中的对象进行排序;但是,这些项目会比较为数字
myArr.sort(function(a,b) {
return a - b;
});
使用函数作为参数的sort():根据数组属性对数组中的对象进行排序;这些项目可以是数字或字符串
myArr.sort(function(a, b) {
if (a.sortnumber < b.sortnumber) return -1;
else if (a.sortnumber > b.sortnumber) return 1;
return 0;
});
我尝试使用所有这3个sort()函数对以下数组进行排序。
var myArr = [{
"sortnumber": 9,
"name": "Bob"
},
{
"sortnumber": 5,
"name": "Alice"
},
{
"sortnumber": 4,
"name": "John"
},
{
"sortnumber": 3,
"name": "James"
},
{
"sortnumber": 7,
"name": "Peter"
},
{
"sortnumber": 6,
"name": "Doug"
},
{
"sortnumber": 2,
"name": "Stacey"
}];
//myArr.sort(); // doesn't do anything since it doesn't know on what property to sort
/*
myArr.sort(function(a, b) {
return (a.sortnumber - b.sortnumber); // sorts array
return (a.name - b.name); // doesn't sort array
});
*/
/*
// sorts array even when I use name as property to sort on
myArr.sort(function(a, b) {
if (a.sortnumber < b.sortnumber) return -1;
else if (a.sortnumber > b.sortnumber) return 1;
return 0;
});
*/
console.log(myArr);
Here也是一个小提琴。
所以,我的问题是:
如果有人能详细说明上述情况,我将非常感激。谢谢。
答案 0 :(得分:5)
好的,经过一些额外的研究,通过我发现非常有帮助的MDN documentation和arraysort和arraysort2链接,我创建了一张可能属于使用给别人,所以我在这里发帖。谢谢大家的答案!
答案 1 :(得分:2)
首先,您做了很好的研究并涵盖了几乎所有可能的案例,您可以找到MDN文档here
您错过了排序非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 is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
答案 2 :(得分:1)
根据数组引用(http://www.w3schools.com/jsref/jsref_sort.asp):
By default, the sort() method sorts the values as strings in alphabetical and ascending order.
因此,您对sort()
的初步了解是正确的。但是,第二个和第三个还不正确。首先,它们都是相同的情况,它为sort()
方法提供了排序功能。此方法应比较a
和b
,并返回负值,零值或正值,指示a
是否小于,等于或大于b
。例如,您仍然可以使用myArr
属性比较name
,如下所示:
myArr.sort(function(a,b) {
return a.name.localeCompare(b.name);
});
答案 3 :(得分:1)
我认为,您希望结合排序条件,例如按名称forst排序然后按数字排序的示例。请观看'John'
。
var myArr = [{ "sortnumber": 9, "name": "Bob" }, { "sortnumber": 5, "name": "Alice" }, { "sortnumber": 4, "name": "John" }, { "sortnumber": 3, "name": "James" }, { "sortnumber": 7, "name": "Peter" }, { "sortnumber": 6, "name": "Doug" }, { "sortnumber": 2, "name": "Stacey" }, { "sortnumber": 14, "name": "John" }, { "sortnumber": 12, "name": "John" }];
myArr.sort(function (a, b) {
return a.name.localeCompare(b.name) || a.sortnumber - b.sortnumber;
});
console.log(myArr);
&#13;
答案 4 :(得分:0)
我在“比较函数”部分的 https://www.w3schools.com/js/js_array_sort.asp 找到了这个。希望能帮到你,谢谢:)
比较函数:比较函数的目的是定义替代排序顺序。
比较函数应返回负值、零值或正值,具体取决于参数:
function(a, b){return a - b}
当 sort() 函数比较两个值时,它将值发送给比较函数,并根据返回的(负、零、正)值对值进行排序。
如果结果为负数 a 排在 b 之前。
如果结果为正,则 b 排在 a 之前。
如果结果为 0,则不会更改两个值的排序顺序。
示例:
比较函数比较数组中的所有值,一次比较两个值 (a, b)。
比较 40 和 100 时,sort() 方法调用比较函数(40, 100)。
该函数计算 40 - 100 (a - b),由于结果为负数 (-60),所以 sort 函数会将 40 排序为小于 100 的值。
您可以使用此代码片段来试验按数字和字母顺序排序:
<html>
<body>
<h2>JavaScript Array Sort</h2>
<p>Click the buttons to sort the array alphabetically or numerically.</p>
<button onclick="myFunction1()">Sort Alphabetically</button>
<button onclick="myFunction2()">Sort Numerically</button>
<p id="demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction1() {
points.sort();
document.getElementById("demo").innerHTML = points;
}
function myFunction2() {
points.sort(function(a, b){return a - b});
document.getElementById("demo").innerHTML = points;
}
</script>
</body>
</html>