微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在数组对象内部对数字数组进行排序,同时保持其他数组的顺序与已排序数字数组的顺序

如何解决在数组对象内部对数字数组进行排序,同时保持其他数组的顺序与已排序数字数组的顺序

我知道,这听起来像是一个充满疑问的问题,但让我澄清一下。我创建了一个应用,用于提取位置仓库facilities,并将其传递到循环中。循环运行并将每个设施(地址)与用户通过Google Maps distanceMatrix API输入的地址或邮政编码进行比较。这是派生facilitiesdistancestimes数组的地方。在这个小例子中,我删除了所有动态部分,以便获得有效的代码输出来测试和硬编码所有结果。另外,这样我就不会继续调用Google Maps API。无论如何,所有facilitiesdistancestimes都是有序的,并且属于彼此。我的意思是,facilities[0]属于distances[0]times[0]值。每个数组中的后续项目也是如此。数组中的每个项[i]分别属于另一个数组中编号相同的项[i]。

我正在尝试对distances数组进行排序,但是从某种意义上来说,现在我正在使数据杂乱无章,因此我不确定如何让distances[0]说出它是否移到{{ 1}}与其他数组的值顺序排列,因为distances[3]facilites[0]未排序。

现在,在对数据进行排序之前,我将使用Object.assign方法将每个数组传递到times[0]中。您将看到,如果对其进行测试,您将拥有一个对象,其中三个数据数组的顺序都相同(根据我在上面的解释)。是否可以在resultsObject内对distances进行排序,同时又以相同顺序对其他两个resultsObjectfacilites进行排序?抱歉,如果我不愿描述或重复自己,但我想尽可能地描述自己。

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 举报,一经查实,本站将立刻删除。