我想实现一种插入排序或命令Javascript数组。基本上我必须在现有索引中插入新项目时重新排序数组。 例如:
Index: 1 - Value: 400
Index: 3 - Value: 660
Index: 5 - Value: 593
我会在索引 3 处插入一个新值 800 ,因此现有项目应向前移动:
Index: 1 - Value: 400
Index: 3 - Value: 800
Index: 4 - Value: 660
Index: 6 - Value: 593
我怎样才能在js中做到这一点?
答案 0 :(得分: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);
请注意,这仅在对象已经排序时才有效。