gpt4 book ai didi

javascript - 通过嵌套数组和传递的键匹配进行复杂的 json 排序

转载 作者:行者123 更新时间:2023-12-01 00:37:14 25 4
gpt4 key购买 nike

我有一个相对复杂的 json 对象需要排序。

简化版本如下所示。

未排序

[
{
"title": "title 1",
"order": [
{
"id": 1,
"position": 0
},
{
"id": 2,
"position": 1
}
]
},
{
"title": "title 2",
"order": [
{
"id": 2,
"position": 0
},
{
"id": 1,
"position": 1
}
]
}
]

我需要根据匹配的 id 及其关联位置对这个数组进行排序...例如,如果我传入 2 的 ID,我希望排序顺序如下,因为“标题 2”有一个匹配的 id位置为 0,而“标题 1”的 id 匹配位置为 1

按 2 的 id 匹配排序

[
{
"title": "title 2",
"order": [
{
"id": 2,
"position": 0
},
{
"id": 1,
"position": 1
}
]
},
{
"title": "title 1",
"order": [
{
"id": 1,
"position": 0
},
{
"id": 2,
"position": 1
}
]
},
]

我认为该函数可能需要看起来像这样,但我无法弄清楚如何最好地构建和排序这些数据。

const unsortedArray = //[json that needs to be sorted]

function sortArray(parentArray, sortArray, match){
for(i in parentArray.sortArray){
if(parentArray.sortArray[i].id == match){
//use this position to sort by
}
}
}

sortArray(unsortedArray,order,1);

最佳答案

这是一些代码高尔夫,但让我们看看我是否可以解释一下。

您想要使用Array.sort()方法。您给它一个带有两个参数的回调:要比较的元素。

最愚蠢的部分是在元素中向下挖掘以找到位置。这就是 a.order.find(a => a.id === id).position 发生的地方。您获取第一个元素并获取 order 属性,该属性恰好是 id 数组。您使用Array.find()获取 id 与您要排序的对象相匹配的对象。当您获得该对象(如 {id: 2,position: 0})时,您就获得了位置。在第二个元素中进行相同的挖掘以找到正确的位置。

现在您将有两个整数进行比较,以告诉排序函数这两个整数中哪一个先进行。 Array.sort() 期望返回值小于零大于零。因此,您可以从一个位置减去另一个位置并简单地返回结果。

唷!

希望这是有道理的。

const data = [
{
title: "title 2",
order: [
{
id: 2,
position: 0
},
{
id: 1,
position: 1
}
]
},
{
title: "title 1",
order: [
{
id: 1,
position: 0
},
{
id: 2,
position: 1
}
]
}
];

const sort = (data, id) =>
data.sort(
(a, b) =>
a.order.find(a => a.id === id).position -
b.order.find(a => a.id === id).position
);


console.log(sort(data, 2))

关于javascript - 通过嵌套数组和传递的键匹配进行复杂的 json 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58021255/

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