2017-06-21 54 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',*仍然*不会对正确的属性进行排序。 –