比方说,我有一个数组,看起来像这样:
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);
但它不起作用。
发布于 2010-03-14 08:39:09
如果您知道索引,您可以使用如下所示的简单函数轻松地交换元素:
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"}]
数组索引只是数组对象的属性,所以您可以交换它的值。
发布于 2016-09-01 20:06:49
对于那些感兴趣的人,这里有一个不可变的版本:
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;
}, []);
}
发布于 2010-03-14 08:38:41
如果您不知道记录当前所在的位置,可以始终使用sort方法:
playlist.sort(function (a, b) {
return a.artist == "Lalo Schifrin"
? 1 // Move it down the list
: 0; // Keep it the same
});
https://stackoverflow.com/questions/2440700
复制相似问题