gpt4 book ai didi

javascript - 通过属性对数组中的数组重新排序的最佳方法

转载 作者:行者123 更新时间:2023-11-29 21:38:09 26 4
gpt4 key购买 nike

假设我有以下数组

[{
'id'=>1
'order'=>0
'name'=>'john'
'date_created'=>'2015-12-8'
},
{
'id'=>1
'order'=>3
'name'=>'sam'
'date_created'=>'2015-12-11'
},
{
'id'=>1
'order'=>1
'name'=>'allen'
'date_created'=>'2015-12-11'
},
{
'id'=>1
'order'=>2
'name'=>'mick'
'date_created'=>'2015-12-11'
},
{
'id'=>1
'order'=>0
'name'=>'fred'
'date_created'=>'2015-12-11'
},
{
'id'=>1
'order'=>0
'name'=>'sarah'
'date_created'=>'2015-12-14'
}
]

后端按创建日期检索。如果 order > 0 仅在同一 date_created,我想重新排序。因此,如果日期相等并且有顺序,则对数组的该部分进行排序。

我目前的尝试如下:

   function sortArray(array) {

var newarray = [];
var sortarray = [];

for(var i=0;i<array.length;i++) {
if(!array[i].order) newarray.push(array[i]);
else {
if(i+1 !== array.length && array[i].date === array[i+1].date && array[i+1].order > 0) sortarray.push(array[i]);
else {
sortarray.push(array[i]);
sortarray.sort(function(a, b) {
return a.order>b.order;
});
newarray = newarray.concat(sortarray);
}
}
}
return newarray;
}

我觉得这可以做得更好。我在这里的第一篇文章,所以我可能错过了我应该怎么做,如果需要更正,请告诉我。提前致谢。

最佳答案

将数据声明修复为合法的 Javascript 后,您可以为内置的 array.sort() 使用自定义回调。自定义回调按两个键排序,首先按 date_created,然后如果它们相等,则按顺序排序。

data.sort(function(a, b) {
var dateA = Date.parse(a.date_created);
var dateB = Date.parse(b.date_created);
if (dateA !== dateB) {
return dateA - dateB;
} else {
// if dates are equal, sort by order
return +a.order - +b.order;
}
});

还有一个您可以实际运行的工作片段:

var data = [{
'id':1,
'order':0,
'name':'john',
'date_created':'2015-12-8'
},
{
'id':1,
'order':3,
'name':'sam',
'date_created':'2015-12-11'
},
{
'id':1,
'order':1,
'name':'allen',
'date_created':'2015-12-11'
},
{
'id':1,
'order':2,
'name':'mick',
'date_created':'2015-12-11'
},
{
'id':1,
'order':0,
'name':'fred',
'date_created':'2015-12-11'
},
{
'id':1,
'order':0,
'name':'sarah',
'date_created':'2015-12-14'
}
]

data.sort(function(a, b) {
var dateA = Date.parse(a.date_created);
var dateB = Date.parse(b.date_created);
if (dateA !== dateB) {
return dateA - dateB;
} else {
// if dates are equal, sort by order
return +a.order - +b.order;
}
});

log(data);

function log(x) {
var div = document.createElement("div");
div.innerHTML = JSON.stringify(x);
document.body.appendChild(div);
}

如果您实际上不希望主要排序为 date_created,而是希望它们保持当前顺序(无论它是什么),那么也可以这样做(我不太清楚从你的问题中确定你想要的)。

关于javascript - 通过属性对数组中的数组重新排序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233892/

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