2016-01-06 69 views
0

排序陣列比方說,我有多維數組通過預定數量

var arr = [{ 
    "id": "1", 
    "firstname": "SUSAN", 
    "dezibel": "91" 
}, { 
    "id": "2", 
    "firstname": "JOHNNY", 
    "dezibel": "74" 
}, { 
    "id": "3", 
    "firstname": "ANDREA", 
    "dezibel": "67" 
}]; 

我怎樣才能通過「dezibel」進行排序,但不能上升或下降,但最接近給多少?例如,

var num = 78; 

所以目標值爲78和最後的排序必須是:74,67,91

+0

但dezibel是對數值,也許排序應該尊重它? –

回答

0

.sort任選需要的功能。該函數一次取2個值,並對它們進行比較:

  • 如果第一個值應該排序高於第二個值,則函數應該返回一個正數。
  • 如果第一個值應該排序低於第二個,則該函數應該返回一個負數。
  • 如果值相等,則函數應該返回0

所以,如果你想通過dezibel升序排序,你可以做

arr.sort(function(a,b){ 
    return a.dezibel- b.dezibel; 
}); 

不過,想要通過一些數字dezibel的距離進行排序。要找到差異的距離78大小和dezibel價值,走差異化的絕對值:現在

Math.abs(78 - a.dezibel) 

,如果我們要根據每個對象的值進行排序,我們可以採取的差異這Math.abs呼籲雙方ab

arr.sort(function(a,b){ 
    return Math.abs(78 - a.dezibel) - Math.abs(78 - b.dezibel); 
}); 
+1

謝謝大家的幫助。我會接受這個答案,因爲這是最詳細的答案。 – markilfin

2

寫它計算到你的電話號碼的距離排序功能:

arr.sort(function(a, b){ 
    return Math.abs(num-a) - Math.abs(num-b); 
}); 

用這個來排序數組中的dezibel屬性。它會計算它們之間的距離和num。然後它會選擇兩個距離中較小的一個,並以這種方式繼續排序整個陣列。

+0

這將需要訪問數組中對象的屬性,而不僅僅是數組元素。 – Mic

+0

我只是簡單的展示了排序功能,我會編輯我的文字更加清晰。謝謝! – Pabs123

2

你需要使用,只需排序的絕對差值每個對象的屬性dezibel的絕對差從78

var arr = [{ 
 
    "id": "1", 
 
    "firstname": "SUSAN", 
 
    "dezibel": "91" 
 
}, { 
 
    "id": "2", 
 
    "firstname": "JOHNNY", 
 
    "dezibel": "74" 
 
}, { 
 
    "id": "3", 
 
    "firstname": "ANDREA", 
 
    "dezibel": "67" 
 
}]; 
 

 
num = 78; 
 

 
arr.sort(
 
    function(first,second){ 
 
    var a = Math.abs(num - (+first.dezibel)); 
 
    var b = Math.abs(num - (+second.dezibel)); 
 
    return a - b; 
 
    }); 
 

 
alert(JSON.stringify(arr));

1

比較自定義排序功能。

var arr = [{ "id": "1", "firstname": "SUSAN", "dezibel": "91" }, { "id": "2", "firstname": "JOHNNY", "dezibel": "74" }, { "id": "3", "firstname": "ANDREA", "dezibel": "67" }], 
 
    num = 78; 
 

 
arr.sort(function (a, b) { 
 
    return Math.abs(a.dezibel - num) - Math.abs(b.dezibel - num); 
 
}); 
 
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');

0

可以使用數組排序功能是:

​​
0

我只需添加一段距離然後對其進行排序...

num=78 
for e in arr 
    e.dist=Math.abs(e.dezibel - num) 
arr.sort (l,r) => 
    if l.dist > r.dist then 1 else -1 

刪除

後DIST,但放在一個線也是OK

arr.sort (l,r) => 
     if Math.abs(l.dezibel - num) > Math.abs(r.dezibel - num) then 1 else -1