2017-04-26 181 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; 
    }); 
} 

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