在现有位置插入新项目后的数组顺序

时间:2013-11-21 16:48:34

标签: javascript

我想实现一种插入排序或命令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中做到这一点?

1 个答案:

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

请注意,这仅在对象已经排序时才有效。