2017-06-21 81 views
-1

我在找到關於如何對數組進行排序的各種示例,但沒有一個顯示如何使用數組。排序數組和循環數組

我正在使用google距離矩陣從一個來源檢索多個目的地的距離數據。我可以輸出目的地信息不是問題:

$.each(response.rows[0].elements, function(x, y) { 

       var distance = response.rows[0].elements[x].distance; 
       var distance_value = distance.value; 
       var distance_text = distance.text; 
       var miles = distance_text.substring(0, distance_text.length -3); 
       var milesInt = parseInt(miles); 


       $('#result').append(destination + " - " + miles + "<br>"); 

       console.log(milesInt); 

      }); 

和我轉換爲英里串入一個int,因爲我認爲它會更容易進行排序,但它的內循環。

這裏是從每個位置API返回的數據的一個例子(有以下2個位置和予移除地址)

{ 
"rows": [ 
    { 
     "elements": [ 
      { 
       "distance": { 
        "text": "328 mi", 
        "value": 527479 
       }, 
       "duration": { 
        "text": "4 hours 48 mins", 
        "value": 17299 
       }, 
       "status": "OK" 
      }, 
      { 
       "distance": { 
        "text": "327 mi", 
        "value": 525717 
       }, 
       "duration": { 
        "text": "4 hours 54 mins", 
        "value": 17624 
       }, 
       "status": "OK" 
      } 
     ] 
    } 
], 
"originAddresses": [ 
    "Texas, USA" 
    ], 

] 
} 

我可以排序在循環內部變量?

+0

好,你能給我一個鏈接或什麼來備份你的投票嗎?我已經花了12個小時在谷歌研究這個,我還沒有發現任何有助於我的具體問題。 – JSum

+0

'var sorted = rows.elements.sort((a,b)=> + a.distance.text.split('')[0] - + b.distance.text.split('')[0]) ;'。在空間上拆分距離文本,獲取結果數組的第一個元素,通過一元'+'運算符和bam轉換爲數字。這些都沒有任何困難,並且結構直接從'Array.prototype.sort'和'String.prototype.split'上的mdn文檔中提取出來。 –

+0

[這裏](https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript)是[某些](https://stackoverflow.com/ questions/10003683/javascript-get-number-from-string)[different](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)[links]( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) –

回答

-1
distances = rows[0].elements.map(function(item) { 
    return item.distance.value; 
} 
distances.sort() 
sorted_elements = []; 
rows[0].elements.forEach(function(item, key) { 
    sorted_elements[distances.indexOf(item.distance.value)] = item; 
}); 
rows[0].elements = sorted_elements; 
delete sorted_elements; 
delete distances; 

首先得到排序距離的數組,然後根據距離鍵給出元素鍵。

+0

認爲OP正試圖支持distance.text字段中的英里值。 –

+0

這會根據距離進行排序,但排序的數組會記住偶數的持續時間。 – azurinko

+0

這會以一種複雜而浪費的方式重新實現'map'和'filter',*仍然*不會對正確的屬性進行排序。 –