如何更改数组中特定项的位置?

时间:2015-05-11 10:19:54

标签: javascript arrays

我试图更改数组中项目的索引位置,但我无法找到方法。

{
   "items": [
        1,
        3,
        2
   ]  
}

2 个答案:

答案 0 :(得分:6)

您可以使用splice移动数组中的元素:

var arr = [
        1,
        3,
        2
   ];
var oldIndex = 2,
    newIndex = 1;


arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);

这会使[1, 2, 3]

内部接头移除并返回元素,而外部接头则将其插入。

为了好玩,我定义了一个能够移动切片的通用函数,而不仅仅是一个元素,并且可以计算索引:

Object.defineProperty(Array.prototype, "move", {
    value:function(oldIndex, newIndex, nbElements){
        this.splice.apply(
            this, [newIndex-nbElements*(newIndex>oldIndex), 0].concat(this.splice(oldIndex, nbElements))
        );
    }
});

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(5, 3, 4);
console.log('1:', arr) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(3, 9, 2);
console.log('2:', arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 4, 5, 3, 6, 7];
arr.move(5, 3, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

var arr = [0, 3, 1, 2, 4, 5, 6, 7];
arr.move(1, 4, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

JS Bin

答案 1 :(得分:-1)

如果要按Unicode顺序(数字成为字符串)对它们进行排序,可以使用sort()函数。

items.sort();

如果您有自定义订单,则需要为sort函数提供排序功能。

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

你可以这样使用它:

items.sort(compare(a, b));