我们有一个对象数组
var items = [
{ id: 1, order_assigned: 2},
{ id: 2, order_assigned: 4},
{ id: 3, order_assigned: 1},
{ id: 4, order_assigned: 5},
{ id: 5, order_assigned: 3}
];
每个都有id和一些订单号。 例如,用户将ID为2的订单号更改为0.现在,数组将如下所示:
var items = [
{ id: 1, order_assigned: 2},
{ id: 2, order_assigned: 0},
{ id: 3, order_assigned: 1},
{ id: 4, order_assigned: 5},
{ id: 5, order_assigned: 3}
];
现在我们需要重新索引order_assigned以填补order_assigned顺序中的空白。 即数组应该看起来像这样
var items = [
{ id: 1, order_assigned: 2},
{ id: 2, order_assigned: 0},
{ id: 3, order_assigned: 1},
{ id: 4, order_assigned: 4},
{ id: 5, order_assigned: 3}
];
ID为4的项目将订单号从5更改为4,因为没有4个订单号的项目。
order_assigned中的编号应按顺序从1到最后建立的排名。 1,2,3,4。如果有人输入1,2,5,7到order_assigned,它必须转换为1,2,3,4。 换句话说,如果订单号中存在间隙,则必须重新计算其后的所有数字。不需要依靠物品订购。
完全坚持如何以正确的方式做到这一点。请帮助!
答案 0 :(得分:1)
我认为您要求我们根据order_assigned
订购此广告,然后缩小order_assigned
之间的差距。
我首先对数组进行排序,然后循环遍历它。然后我用当前索引替换order_assigned
值。
var items = [
{ id: 1, order_assigned: 2},
{ id: 2, order_assigned: 0},
{ id: 3, order_assigned: 1},
{ id: 4, order_assigned: 5},
{ id: 5, order_assigned: 3}
];
items.sort(function(a, b) {
return a.order_assigned - b.order_assigned;
});
var counter = 0;
for (var index in items) {
if (items[index].order_assigned === 0) {
continue;
} // leave orders that are 0 the same
items[index].order_assigned = ++counter;
}
items.sort(function(a, b) {
return a.id - b.id;
}); // sort again on the ID field
console.log(items);

答案 1 :(得分:1)
function sortCloseGap(array) {
return array.slice() // copy
.sort(function(a, b) { return a.order_assigned - b.order_assigned }) // sort
.map(function(item, index) { // assign new order
item.order_assigned = index + 1;
return item;
});
}
我希望你不要介意可变性。