2013-11-21 24 views
1

我想實施一種插入排序或訂購Javascript數組。基本上,我必須重新排列數組,同時在現有索引中插入新項目。 例子:在現有位置插入新項目後的數組順序

Index: 1 - Value: 400 
Index: 3 - Value: 660 
Index: 5 - Value: 593 

我會插入一個新值,在指數,使已經存在的項目應前移:

Index: 1 - Value: 400 
Index: 3 - Value: 800 
Index: 4 - Value: 660 
Index: 6 - Value: 593 

我怎麼能在JS做到這一點?

+0

http://stackoverflow.com/questions/586182/javascript-insert-item-into-array-at-a-specific-index可能的重複 – forsvunnet

回答

0

有了javascript,你在數組中的鍵沒有太大的靈活性。 您可能正在尋找array.splice函數,該函數允許您在指定索引處插入項目。

一個例子:

var arr = []; 
arr[1] = 400; 
arr[3] = 660; 
arr[5] = 594; 

arr.splice(3, 0, 800); 
// arr is now = [undefined × 1, 400, undefined × 1, 800, 660, undefined × 1, 594] 

正如你可以看到陣列現在包含在未指定的索引未定義的值(0,2和5)。

如果您想要更好地控制索引,您必須反駁到使用對象。

使用對象,您可以反向循環數組並在當時增加一個項目的索引(先前覆蓋下一個項目)或基於舊的創建新對象。

下面是使用後一種方法的例子:

var obj = {1:400, 3:660, 5:593}; 
var push_index = function(index, value) { 
    var push_i = index; 
    var new_obj = {}; 
    for (var i in obj) { 
    if (i == push_i) { 
     push_i++; 
     new_obj[push_i] = obj[i]; 
    } else { 
     new_obj[i] = obj[i]; 
    } 
    } 
    new_obj[index] = value; 
    return new_obj; 
}; 
obj = push_index(3, 800); 

請注意,如果對象是已經排序這僅適用。

相關問題