与JS或其他解决方案中的shift()相反

时间:2017-05-23 11:29:36

标签: javascript

我正在尝试获取一个数组并让它循环自己。我已经找到了一个简单的解决方案,让它向后循环:

array = ['Dog', 'Cat', 'Animal', 'Pig']
array[array.length] = array[0];
array.shift();

正如预期的那样,结果是[' Cat',' Animal',' Pig',#39; Dog']。我怎么能以类似的方式做相反的事情。通过相反的方式,我的意思是[' Pig',' Dog',' Cat',' Animal']。我试图找到与.shift()相反的但却无法找到任何东西。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

你可以Array#pop

  

pop() 方法从数组中删除最后一个元素并返回该元素。此方法更改数组的长度。

Array#unshift

  

unshift() 方法将一个或多个元素添加到数组的开头,并返回数组的新长度。



var array = ['Dog', 'Cat', 'Animal', 'Pig'];

array.push(array.shift());
console.log(array); // ["Cat", "Animal", "Pig", "Dog"]

array = ['Dog', 'Cat', 'Animal', 'Pig'];

array.unshift(array.pop());
console.log(array); // ["Pig", "Dog", "Cat", "Animal"]




答案 1 :(得分:0)

看起来您正在寻找rotate功能:

Array.prototype.rotate = (function() {
    // save references to array functions to make lookup faster
    var push = Array.prototype.push,
        splice = Array.prototype.splice;

    return function(count) {
        var len = this.length >>> 0, // convert to uint
            count = count >> 0; // convert to int

        // convert count to value in range [0, len)
        count = ((count % len) + len) % len;

        // use splice.call() instead of this.splice() to make function generic
        push.apply(this, splice.call(this, 0, count));
        return this;
    };
})();

a = [1,2,3,4,5];
a.rotate(1);
console.log(a.join(',')); //2,3,4,5,1
a.rotate(-1);
console.log(a.join(',')); //1,2,3,4,5
a.rotate(-1);
console.log(a.join(',')); //5,1,2,3,4