Jam*_*ley 5 javascript arrays sorting lodash
我正在尝试订购一系列对象,在这个上下文中,我正在尝试编写一个函数,用户可以在距离地标的位置订购房屋阵列.假设我从通过AJAX调用的API返回以下数据:
"data" : [
{
'id' : 123,
'address' : '12 street name',
'city' : 'City Name',
'landmarks' : [
{
'name' : 'landmark one',
'distanceInMiles' : 0.6
},
{
'name' : 'landmark two',
'distanceInMiles' : 0.4
}
]
},
{
'id' : 345,
'address' : '22 street name',
'city' : 'City Name',
'landmarks' : [
{
'name' : 'landmark one',
'distanceInMiles' : 0.2
},
{
'name' : 'landmark three',
'distanceInMiles' : 0.1
}
]
},
{
'id' : 456,
'address' : '28 street name',
'city' : 'City Name',
'landmarks' : [
{
'name' : 'landmark six',
'distanceInMiles' : 8.2
},
{
'name' : 'landmark seven',
'distanceInMiles' : 1.6
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我已经有一些代码将返回包含特定地标的房屋,例如过滤此数组以返回具有地标"地标性"的房屋,并将过滤后的数据存储到单独的数组中.但我现在想要更进一步,根据distanceInMiles所选地标的值,对我过滤的结果数组进行排序.
所以,坚持这个背景,我正在尝试写一些代码,首先返回两个房子,地址为"22街道名称",第二个房子带有"12街道名称"地址,因为"22街道名称"房子更近了比较具有里程碑意义.
我正在使用_loadash作为我的实用程序库,但很难理解如何按照"具有里程碑意义的一个"距离对过滤后的数组进行排序.有任何想法吗?
任何帮助将不胜感激.
小智 0
var data = [
{
"id" : 123,
"address" : "12 street name",
"city" : "City Name",
"landmarks" : [
{
"name" : "landmark one",
"distanceInMiles" : 0.6
},
{
"name" : "landmark two",
"distanceInMiles" : 0.4
}
]
},
{
"id" : 345,
"address" : "22 street name",
"city" : "City Name",
"landmarks" : [
{
"name" : "landmark one",
"distanceInMiles" : 0.2
},
{
"name" : "landmark three",
"distanceInMiles" : 0.1
}
]
},
{
"id" : 456,
"address" : "28 street name",
"city" : "City Name",
"landmarks" : [
{
"name" : "landmark six",
"distanceInMiles" : 8.2
},
{
"name" : "landmark seven",
"distanceInMiles" : 1.6
}
]
}
];
function sortByLandmarkDistance(name) {
var getDistance = function(house) {
var minDistance = Infinity;
for(var i = 0; i < house.landmarks.length; ++i)
if(house.landmarks[i].name === name)
minDistance = Math.min(minDistance, house.landmarks[i].distanceInMiles);
return minDistance;
};
return data.sort(function(a, b) {
return getDistance(a) - getDistance(b);
});
}
// Sort houses by distance from 'landmark one'
var sorted = sortByLandmarkDistance('landmark one');
document.body.innerHTML = '<pre>' + JSON.stringify(sorted, null, ' ') + '</pre>';Run Code Online (Sandbox Code Playgroud)