如何将项数组转换/旋转到JavaScript数组中的特定索引?

时间:2015-02-13 21:18:39

标签: javascript jquery

我有一个jQuery元素集合(图像)。

var images = $('img');

我想更改集合,使其从特定索引开始,并将之前的项目附加到结尾。有点像Rolodex

如果需要,我也可以将它们转换为数组。使用JavaScript数组的一个示例:

var images = ['image0', 'image1', 'image2', 'image3'];
// rotate through to index 2
// images should == ['image2', 'image3', 'image0', 'image1']

5 个答案:

答案 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());