如何解决在数组对象内部对数字数组进行排序,同时保持其他数组的顺序与已排序数字数组的顺序
我知道,这听起来像是一个充满疑问的问题,但让我澄清一下。我创建了一个应用,用于提取位置仓库facilities
,并将其传递到循环中。循环运行并将每个设施(地址)与用户通过Google Maps distanceMatrix API输入的地址或邮政编码进行比较。这是派生facilities
,distances
和times
数组的地方。在这个小例子中,我删除了所有动态部分,以便获得有效的代码输出来测试和硬编码所有结果。另外,这样我就不会继续调用Google Maps API。无论如何,所有facilities
,distances
和times
都是有序的,并且属于彼此。我的意思是,facilities[0]
属于distances[0]
和times[0]
值。每个数组中的后续项目也是如此。数组中的每个项[i]分别属于另一个数组中编号相同的项[i]。
我正在尝试对distances
数组进行排序,但是从某种意义上来说,现在我正在使数据杂乱无章,因此我不确定如何让distances[0]
说出它是否移到{{ 1}}与其他数组的值顺序排列,因为distances[3]
和facilites[0]
未排序。
现在,在对数据进行排序之前,我将使用Object.assign方法将每个数组传递到times[0]
中。您将看到,如果对其进行测试,您将拥有一个对象,其中三个数据数组的顺序都相同(根据我在上面的解释)。是否可以在resultsObject
内对distances
进行排序,同时又以相同顺序对其他两个resultsObject
和facilites
进行排序?抱歉,如果我不愿描述或重复自己,但我想尽可能地描述自己。
times
let inputVal = [];
let facilityArray = [];
let distanceArray = [];
let timeArray = [];
let filteredArray = [];
let sortedArray = [];
let resultsObject,intdistanceResult;
callFetch = () => {
const facilities = ["MD01","PA01","OH01","NC01","GA01","SC01","SC02","TN01","AL01","FL02","TX01","IN01","SC03","FL01"];
const distances = [133,32,538,422,795,666,664,822,1118,867,1504,657,635,1210];
const times = ["2 hours 12 mins","47 mins","8 hours 20 mins","6 hours 32 mins","12 hours 0 mins","10 hours 2 mins","9 hours 56 mins","12 hours 21 mins","16 hours 33 mins","12 hours 43 mins","22 hours 16 mins","10 hours 16 mins","9 hours 39 mins","17 hours 35 mins"
];
facilityArray.push(facilities);
distanceArray.push(distances);
timeArray.push(times);
// console.log(distanceArray);
// sortedArray = distanceArray.sort((a,b) => a - b);
// console.log(sortedArray);
resultsObject = Object.assign({},[facilityArray,distanceArray,timeArray]);
console.log(resultsObject);
}
form.addEventListener("submit",e => {
e.preventDefault();
callFetch();
});
<!DOCTYPE html>
<html>
<head>
<title>Ethos Service Center - Google Maps distance Search</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>
<body>
<div class="container-sm mt-3">
<form class="form mb-3" id="form">
<div class="search">
<div class="card-body">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Patient Destination</span>
</div>
<input class="form-control" type="text" placeholder="Enter Zip Code" class="patientaddress" id="patientaddress">
<div class=" input-group-prepend ">
<span class="input-group-text " id="message "></span>
</div>
</div>
<hr>
<button class="btn btn-primary mt-2 " type="submit " id="submit ">Submit</button>
</div>
</div>
</form>
</div>
</body>
</html>
let inputVal = [];
let facilityArray = [];
let distanceArray = [];
let timeArray = [];
let filteredArray = [];
let sortedArray = [];
let resultsObject,e => {
e.preventDefault();
callFetch();
});
解决方法
将数组合并为单个对象数组,然后按距离排序
const facilities = ["MD01","PA01","OH01","NC01","GA01","SC01","SC02","TN01","AL01","FL02","TX01","IN01","SC03","FL01"];
const distances = [133,32,538,422,795,666,664,822,1118,867,1504,657,635,1210];
const times = ["2 hours 12 mins","47 mins","8 hours 20 mins","6 hours 32 mins","12 hours 0 mins","10 hours 2 mins","9 hours 56 mins","12 hours 21 mins","16 hours 33 mins","12 hours 43 mins","22 hours 16 mins","10 hours 16 mins","9 hours 39 mins","17 hours 35 mins"
];
const combined = facilities.map((facility,i) =>({facility,distance: distances[i],time: times[i]}))
.sort((a,b) => a.distance-b.distance)
console.log(combined)
,
Object.assign
解决方案并没有真正帮助您更进一步。您将需要为设施,距离和时间的每三倍创建小的对象:
let triples = facilities.map((facility,i) => ({
facility,time: times[i]
}));
您可以按距离对这个数组进行排序:
triples.sort((a,b) => a.distance - b.distance);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。