当前位置:  开发笔记 > 编程语言 > 正文

重新排序数组

如何解决《重新排序数组》经验,为你挑选了4个好方法。

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

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"}到最后.

我尝试使用splice,如下所示:

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

但它不起作用.



1> Matt..:

语法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

图:

算法图


这是一个很好的答案,splice()中的splice()可以很好地完成工作.然而,应该注意的是,向Array原型添加move()方法称为"Monkey Patching",通常被认为是不好的做法.http://stackoverflow.com/questions/5741877/is-monkey-patching-really-that-bad

2> CMS..:

如果你知道索引,你可以轻松地交换元素,使用这样一个简单的函数:

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"}]

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



3> chmanie..:

对于那些感兴趣的人,这是一个不可变的版本:

function immutableMove(arr, from, to) {
  return arr.reduce((prev, current, idx, self) => {
    if (from === to) {
      prev.push(current);
    }
    if (idx === from) {
      return prev;
    }
    if (from < to) {
      prev.push(current);
    }
    if (idx === to) {
      prev.push(self[from]);
    }
    if (from > to) {
      prev.push(current);
    }
    return prev;
  }, []);
}



4> Trevor..:

删除元素时,将2更改为1作为splice调用中的第一个参数:

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有