2013-11-14 41 views
-1

假設我有以下列格式數據排序的對象:由屬性保持的陣列值,而不是一個串的一個

[ 
    { 
     foo: "a", 
     bar: 5, 
     baz: [ 
      "qux doo", 
      "adsf", 
      "abcd", 
      "zzzz", 
      "898jwe9" 
     ], 
    }, 
      { 
     foo: "f", 
     bar: 4859, 
     baz: [ 
      "abcd", 
      "xxrwu", 
      "urnr", 
      "pupupu", 
      "sdsdsd" 
     ], 
    }, 
] 

假設我想通過foo此數組進行排序。這可能很簡單:

.sort(function(a, b){ return (a.foo < b.foo) - (a.foo > b.foo); }); 

但是如果我想按baz對它進行分類呢?如何做到這一點?

+1

你在尋找什麼樣的邏輯?你怎麼知道哪個陣列應該「先來」? –

+0

與字符串相同的方式。 – user2958725

+0

但他們不是字符串,是他們。有很多不同的方式可以比較陣列。除非你說你想比較它們,就好像它們是字符串一樣,在這種情況下,你可以將它們轉換爲字符串,現有的解決方案將自動執行。 –

回答

0
.sort(function(a, b) { 
    for (var i = 0; i < Math.min(a.baz.length, b.baz.length); i++) { 
     if (a.baz[i] < b.baz[i]) return -1; 
     if (a.baz[i] > b.baz[i]) return 1; 
    } 
    return (a.baz.length > b.baz.length) - (a.baz.length < b.baz.length); 
}); 
+0

這會產生任何結果的任何輸入的情況下,比如果我要使用:'.sort(函數(a,b){返回(JSON.stringify(a.baz) JSON.stringify(b.baz));});'? – user2958725

+0

@ user2958725是的,例如,如果列表的長度不同。它也可以依賴於列表中的字符串,例如''a-「<」a-b「',但是''」a-「]'>'[」a-b「]''。 –

相關問題