Javascript 通过嵌套数组和传递的键匹配进行复杂的json排序
我需要对一个相对复杂的json对象进行排序 简化版本如下所示 未分类 我需要根据匹配的ID及其相关位置对该数组进行排序。。。例如,如果我传入ID为2,我希望排序顺序如下,因为“title 2”的ID匹配位置为0,而“title 1”的ID匹配位置为1 按2的id匹配排序 我认为函数可能需要这样的外观,但我无法确定如何最好地构造和排序这些数据Javascript 通过嵌套数组和传递的键匹配进行复杂的json排序,javascript,json,Javascript,Json,我需要对一个相对复杂的json对象进行排序 简化版本如下所示 未分类 我需要根据匹配的ID及其相关位置对该数组进行排序。。。例如,如果我传入ID为2,我希望排序顺序如下,因为“title 2”的ID匹配位置为0,而“title 1”的ID匹配位置为1 按2的id匹配排序 我认为函数可能需要这样的外观,但我无法确定如何最好地构造和排序这些数据 const unsortedArray = //[json that needs to be sorted] function sortArray(par
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);
这是一个有点代码高尔夫,但让我看看是否可以解释 你想使用这个方法。您给它一个回调,它接受两个参数:要比较的元素 愚蠢的部分正在元素中挖掘以找到位置。这就是发生这种情况的地方
a.order.find(a=>a.id==id).position
。获取第一个元素并获得order属性,该属性恰好是一个ID数组。用于获取id与排序依据的id匹配的对象。当你得到那个对象时(比如{id:2,position:0}
你就得到了位置。在第二个元素中进行同样的挖掘以找到正确的位置
现在,您将有两个整数进行比较,以告诉排序函数这两个整数中哪一个先到。Array.sort()要求返回值小于零、等于零或大于零。因此,您可以从另一个位置减去一个位置,然后只返回结果
呸
希望这有点道理
const数据=[
{
标题:“标题2”,
订单:[
{
id:2,
职位:0
},
{
id:1,
职位:1
}
]
},
{
标题:“标题1”,
订单:[
{
id:1,
职位:0
},
{
id:2,
职位:1
}
]
}
];
常量排序=(数据,id)=>
data.sort(
(a,b)=>
a、 order.find(a=>a.id==id).position-
b、 order.find(a=>a.id==id).position
);
log(sort(data,2))
这是一段代码,但让我们看看是否可以解释一下
您希望使用该方法。您给它一个回调,该回调包含两个参数:要比较的元素
goofy部分正在元素中挖掘以找到位置。这就是发生这种情况的地方a.order.find(a=>a.id==id).position
。获取第一个元素并获取order属性,该属性恰好是一个id数组。用于获取id与排序依据的id匹配的对象。获取该对象时(如{id:2,position:0}
你得到了位置。在第二个元素中进行同样的挖掘以找到正确的位置
现在,您将有两个整数进行比较,以告诉排序函数这两个整数中哪一个先到。Array.sort()要求返回值小于零、等于零或大于零。因此,您可以从另一个位置减去一个位置,然后只返回结果
呸
希望这有点道理
const数据=[
{
标题:“标题2”,
订单:[
{
id:2,
职位:0
},
{
id:1,
职位:1
}
]
},
{
标题:“标题1”,
订单:[
{
id:1,
职位:0
},
{
id:2,
职位:1
}
]
}
];
常量排序=(数据,id)=>
data.sort(
(a,b)=>
a、 order.find(a=>a.id==id).position-
b、 order.find(a=>a.id==id).position
);
console.log(排序(数据,2))
谢谢您的帮助,这一行是item.order[0].id===2
但是这是有问题的,因为它假定位置0的item.order始终是正确的引用。然后将排序部分作为一个函数,您可以将id作为参数传递并对其排序感谢帮助,这一行在这里item.order[0].id===2
但是有问题,因为它假定位置0的item.order始终是正确的引用。然后将该排序部分作为函数,您可以将该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);
const sampleArray = [
{
"title": "title 1",
"order": [
{
"id": 1,
"position": 0
},
{
"id": 2,
"position": 1
}
]
},
{
"title": "title 2",
"order": [
{
"id": 2,
"position": 0
},
{
"id": 1,
"position": 1
}
]
}
]
const swap = (arr, idx1, idx2) => {
[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]];
};
sampleArray.forEach((item,index) => {
if(item.order[0].id === 2) {
swap(sampleArray,index,index-1)
}
})