[英]Simple sort algorithm for names - Javascript
如果我有一個對象數組Array 1: [Object 1, Object 2, Object 3]
,則每個對象如下所示:
object 1 has properties : creation date, name, class, size where name = Bear
object 2 has properties : creation date, name, class, size where name = Dog
object 3 has properties : creation date, name, class, size where name = Guerilla
而且我想根據它們各自的名稱(按字母順序)對它們進行排序,因此數組2看起來如下[Object 1 (Bear), Object 2 (Dog), Object 3 (Guerilla)]
我將如何用Javascript處理此問題? 有什么方便的方法嗎? 我對JS比較陌生。 先感謝您!
將排序方法與自定義比較器一起使用:
Array1.sort(function(x, y){
var n1 = x.name;
var n2 = y.name;
return n1 == n2 ? 0
: n1 < n2 ? -1
: 1;
});
arr.sort(function (a, b) {
return a.localeCompare(b);
});
請注意, sort
是就地排序,因此原始數組將被排序。
javascript sort方法接受匿名比較功能,該功能為您提供了對任何屬性上的對象進行排序所需的所有靈活性。
通用模式是:
arr.sort(function(a,b){...});
提供給sort方法的“ anonymous”函數接受兩個對象進行比較,並應返回一個值,該值指示對哪個元素進行更高排序,如下所示:
如果a的排序應高於b,則返回1
如果a的排序應低於b,則返回-1
如果a等於b(用於排序),則返回0
這是一個示例(省略號表示其他屬性):
var beasties = [
{name:'Bear', created_at: ... },
{name:'Dog', ... },
{name:'Gorilla', ... }
];
beasties.sort(function(a,b){return a.name > b.name});
在這里,我依靠js來比較name屬性返回的字符串的功能。
我認為應該為您解決這個問題。
您可以將自定義比較函數傳遞給Array.sort,然后排序算法將使用該比較函數來確定兩個數組元素中哪個較大。 當算法比較兩個對象時,它將這些對象傳遞給比較函數。 當該函數返回1時,它將第一個視為更大。 當返回-1時,它認為第二個較大。 當它返回0時,認為它們相等。
function compare_function(obj1, obj2){
if (obj1.name == obj2.name) return 0;
if (obj1.name < obj2.name) return -1 else return 1;
}
my_array.sort(compare_function)
您可以使用數組的sort方法,並傳入一個函數:
Array1.sort(function(left,right) {
if (left.name < right.name) return -1;
if (left.name > right.name) return 1;
return 0;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.