如何使用另一个 json 的顺序对 json 个对象进行排序
How to sort json objects using the order of another json
我有一个公园列表 (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"
}
我需要根据 areaId 在 [= 中的顺序对 park_list 进行排序54=].
所以如果我的 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);
您可以对想要的顺序取 Map
并按同一键的索引排序。
var 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: "2", areaName: "area2" }, { cityId: "1", areaId: "4", areaName: "area4" }, { cityId: "1", areaId: "1", areaName: "area1" }, { cityId: "1", areaId: "3", areaName: "area1" }],
order = new Map(area_list.map(({ areaId }, i) => [areaId, i]));
park_list.sort(({ area_id: a }, { area_id: b }) => order.get(a) - order.get(b));
console.log(park_list);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我有一个公园列表 (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"
}
我需要根据 areaId 在 [= 中的顺序对 park_list 进行排序54=].
所以如果我的 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);
您可以对想要的顺序取 Map
并按同一键的索引排序。
var 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: "2", areaName: "area2" }, { cityId: "1", areaId: "4", areaName: "area4" }, { cityId: "1", areaId: "1", areaName: "area1" }, { cityId: "1", areaId: "3", areaName: "area1" }],
order = new Map(area_list.map(({ areaId }, i) => [areaId, i]));
park_list.sort(({ area_id: a }, { area_id: b }) => order.get(a) - order.get(b));
console.log(park_list);
.as-console-wrapper { max-height: 100% !important; top: 0; }