2017-04-26 128 views
-2

我们有对象阵列重新映射

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,COS存在与4顺序分配数没有项目。

order_assigned中的编号应该从1到最后建立的等级。 1,2,3,4。如果有人输入1,2,5,7以进行order_assigned,则必须将其转换为1,2,3,4。 换句话说,如果订单号码存在差距,则必须重新计算它之后的所有数字。不需要诉诸物品订单本身。

完全卡住了如何做到这一点正确的方式。请帮忙!

+5

也许我错过了一些东西,但你用什么逻辑来确定新的'order_assigned'? – larz

+1

“order_assigned order”中的空白是什么意思?期望的输出如何排序(它仍然是由id上升)? – chazsolo

+1

你有重新编号的规则吗? –

回答

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);

+0

谢谢你,托比!这正是我需要的! – Zhlobopotam

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; 
    }); 
} 

我希望你不介意的可变性。