gpt4 book ai didi

javascript - 如何使用另一个json的顺序对json对象进行排序

转载 作者:行者123 更新时间:2023-11-29 18:43:05 25 4
gpt4 key购买 nike

我有一个公园列表(park_list),可以按距离和面积排序。

我已经使用下面的代码成功地按距离排序:

sortList(index){
return function(a, b){
return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
}
}

但是,按面积排序的问题与按距离排序的问题不同。我需要根据给定区域列表 (area_list) 的顺序对区域进行排序。

我的 park_list 是这样的:

[
{
"parkName" : "park4",
"area_id" : "4"
},
{
"parkName" : "park2",
"area_id" : "2"
},
{
"parkName" : "park1",
"area_id" : "1"
},
{
"parkName" : "park3",
"area_id" : "3"
},

]

我的 area_list 是这样的:

{
"cityId": "1",
"areaId": "1",
"areaName": "area1"
}, {
"cityId": "1",
"areaId": "2",
"areaName": "area2"
}, {
"cityId": "1",
"areaId": "3",
"areaName": "area3"
}, {
"cityId": "1",
"areaId": "4",
"areaName": "area4"
}

我需要根据 area_listareaId 的顺序对我的 park_list 进行排序。

所以如果我的 area_list 是这样的:

{
"cityId": "1",
"areaId": "2",
"areaName": "area2"
}, {
"cityId": "1",
"areaId": "4",
"areaName": "area4"
}, {
"cityId": "1",
"areaId": "1",
"areaName": "area1"
}, {
"cityId": "1",
"areaId": "3",
"areaName": "area1"
}

我的 park_list 应该这样排序:

[
{
"parkName" : "park2",
"area_id" : "2"
},
{
"parkName" : "park4",
"area_id" : "4"
},
{
"parkName" : "park1",
"area_id" : "1"
},
{
"parkName" : "park3",
"area_id" : "3"
},

]

我真的很难过。如果能提供任何帮助,我将不胜感激。

最佳答案

通过使用 Array#reduce 创建一个对象来保存每个 area_id 的索引方法,然后使用该对象进行排序。

const area_list_index = area_list.reduce((obj, { areaId }, i) => {
obj[areaId] = i;
return obj;
}, {})


park_list.sort((a, b) => area_list_index[a.area_id] - area_list_index[b.area_id])

let park_list = [{
"parkName": "park4",
"area_id": "4"
},
{
"parkName": "park2",
"area_id": "2"
},
{
"parkName": "park1",
"area_id": "1"
},
{
"parkName": "park3",
"area_id": "3"
},

]

let area_list = [{
"cityId": "1",
"areaId": "2",
"areaName": "area2"
}, {
"cityId": "1",
"areaId": "4",
"areaName": "area4"
}, {
"cityId": "1",
"areaId": "1",
"areaName": "area1"
}, {
"cityId": "1",
"areaId": "3",
"areaName": "area1"
}]

const area_list_index = area_list.reduce((obj, {
areaId
}, i) => {
obj[areaId] = i;
return obj;
}, {})


park_list.sort((a, b) => area_list_index[a.area_id] - area_list_index[b.area_id])

console.log(park_list);

或者您可以使用 Array#findIndex获取索引的方法,但效率不高。

park_list.sort((a, b) => area_list.findIndex((o) => o.areaId == a.area_id) - area_list.findIndex((o) => o.areaId == b.area_id))

let park_list = [{
"parkName": "park4",
"area_id": "4"
},
{
"parkName": "park2",
"area_id": "2"
},
{
"parkName": "park1",
"area_id": "1"
},
{
"parkName": "park3",
"area_id": "3"
},

]

let area_list = [{
"cityId": "1",
"areaId": "2",
"areaName": "area2"
}, {
"cityId": "1",
"areaId": "4",
"areaName": "area4"
}, {
"cityId": "1",
"areaId": "1",
"areaName": "area1"
}, {
"cityId": "1",
"areaId": "3",
"areaName": "area1"
}]



park_list.sort((a, b) => area_list.findIndex((o) => o.areaId == a.area_id) - area_list.findIndex((o) => o.areaId == b.area_id))

console.log(park_list);

关于javascript - 如何使用另一个json的顺序对json对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55707520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com