我有一个jQuery元素集合(图像)。
var images = $('img');
我想更改集合,使其从特定索引开始,并将之前的项目附加到结尾。有点像Rolodex。
如果需要,我也可以将它们转换为数组。使用JavaScript数组的一个示例:
var images = ['image0', 'image1', 'image2', 'image3'];
// rotate through to index 2
// images should == ['image2', 'image3', 'image0', 'image1']
答案 0 :(得分:4)
对于数组,你可以这样做:
images.push.apply(images, images.splice(0, i));
var images = ['image0', 'image1', 'image2', 'image3'];
var i = 2;
images.push.apply(images, images.splice(0, i));
document.body.textContent = images.join(",");

可以向.apply()
传递的项目数量有限制,但数以千计。如果这是一个问题,那么您可以从.splice()
中推送单个项目。
答案 1 :(得分:3)
如果它是一个数组,那么Array.splice
:
> x = ['image0', 'image1', 'image2', 'image3'];
[ 'image0',
'image1',
'image2',
'image3' ]
> x = x.splice(2).concat(x)
[ 'image2',
'image3',
'image0',
'image1' ]
> x = ['image0', 'image1', 'image2', 'image3'];
[ 'image0',
'image1',
'image2',
'image3' ]
> x = x.splice(3).concat(x)
[ 'image3',
'image0',
'image1',
'image2' ]
>
Splice就地斩断了东西,剩下的就是拼接的前两个元素。我们把它放到X.原始数组被修改到位,因此它指向原始引用时的内容,因此,剩下的n个元素。因此,您将前两个拼接的剩余元素连接起来。
您甚至可以使用负值并使用它,向前和向后移动:
> x = ['image0', 'image1', 'image2', 'image3'];
[ 'image0',
'image1',
'image2',
'image3' ]
> x = x.splice(-1).concat(x)
[ 'image3',
'image0',
'image1',
'image2' ]
> x = x.splice(1).concat(x)
[ 'image0',
'image1',
'image2',
'image3' ]
> x = x.splice(-3).concat(x)
[ 'image1',
'image2',
'image3',
答案 2 :(得分:1)
如果您需要智能排序功能,那么您可以将函数放入sort作为算法的参数。对于你的任务,它可以是这样的:
var images = ['image5','image0', 'image1', 'image2', 'image3','image4'];
var magicNum = 2 -1;//your offset with shift = 1
images.sort(function(a,b){
a = parseInt(a.substr(5))-magicNum,
b = parseInt(b.substr(5))-magicNum;
if(a*b<=0) return a>0?-1:b>0?1:0;
else return a-b;
});
document.body.textContent = images.join(", ");
它甚至可以在大型非动态数组上使用。此方法也比使用splice和push的方法更具可扩展性。
答案 3 :(得分:0)
var arr = [2,3,4,5,6,7];
function rot(arr, ind)
{
var narr = [];
var len = arr.length;
for(var i=0; i<arr.length; i++)
{
narr.push((i+ind<len?arr[i+ind]:arr[len-i-1]));
}
return narr;
}
rot(arr,2); // returns 4,5,6,7,2,3
答案 4 :(得分:0)
var data_all= ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul" , 'Aug' ,'Sep' , 'Oct' , 'Nov' , 'Dec'];
data_all.push(data_all.shift());