簡體   English   中英

名稱的簡單排序算法-Javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM