对阵列重新排序

2022-08-30 04:44:17

比方说,我有一个数组,看起来像这样:

var playlist = [
    {artist:"Herbie Hancock", title:"Thrust"},
    {artist:"Lalo Schifrin", title:"Shifting Gears"},
    {artist:"Faze-O", title:"Riding High"}
];

如何将元素移动到另一个位置?

例如,我想移动到最后。{artist:"Lalo Schifrin", title:"Shifting Gears"}

我尝试使用拼接,如下所示:

var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);

但它不起作用。


答案 1

Array.splice 的语法为:

yourArray.splice(index, howmany, element1, /*.....,*/ elementX);

哪里:

  • index 是数组中要开始从中删除元素的位置
  • howmany 是要从索引中删除多少个元素
  • element1, ..., elementX 是要从位置索引插入的元素

这意味着 可用于删除元素、添加元素或替换数组中的元素,具体取决于您传递的参数。splice()

请注意,它返回已删除元素的数组。

一些好的和通用的东西将是:

Array.prototype.move = function (from, to) {
  this.splice(to, 0, this.splice(from, 1)[0]);
};

然后只需使用:

var ar = [1,2,3,4,5];
ar.move(0,3);
alert(ar) // 2,3,4,1,5

图:

Algorithm diagram


答案 2

如果您知道索引,则可以使用如下简单函数轻松交换元素:

function swapElement(array, indexA, indexB) {
  var tmp = array[indexA];
  array[indexA] = array[indexB];
  array[indexB] = tmp;
}

swapElement(playlist, 1, 2);
// [{"artist":"Herbie Hancock","title":"Thrust"},
//  {"artist":"Faze-O","title":"Riding High"},
//  {"artist":"Lalo Schifrin","title":"Shifting Gears"}]

数组索引只是数组对象的属性,因此您可以交换其值。