编写一个使用.pop和.splice旋转数组的函数

时间:2017-08-30 19:03:54

标签: javascript arrays

我需要编写一个带两个参数的函数。它将通过弹出一个元素并在数组的开头拼接它来修改数组(are)。它应该重复num次。到目前为止我的尝试:



function rotate(arr, num) {
    var i = 0;
    while (i<num){
        arr.pop();
        arr.splice(0, 0, arr.pop());
        i++;
    }
    return arr;
}
console.log(rotate(["Harry","Sarah","Oscar","Tina"],2));
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

Array::pop()删除并返回已删除的元素。您只需要使用一次。

正如@Xufox正确提到

  

通常用arr.unshift(arr.pop())完成;我不确定为什么OP需要在这里使用拼接...

&#13;
&#13;
function rotate(arr, num) {
    var i = 0;
    while (i<num){
        arr.unshift(arr.pop());
        i++;
    }
    return arr;
}
console.log(rotate(["Harry","Sarah","Oscar","Tina"],2));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

pop将删除数组的最后一个条目并将其返回。做两次时,你会松开一个条目

&#13;
&#13;
function rotate(arr, num) {
    var i = 0;
    while (i<num){
        var x = arr.pop();
        arr.splice(0, 0, x);
        i++;
    }
    return arr;
}
console.log(rotate(["Harry","Sarah","Oscar","Tina"],2));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

不是告诉我们这个函数现在做了什么,而是一般性地解释函数应该做什么?或者您对示例中的数组有什么期望?

我看到了几件事:

  1. 在第4行中,您使用的是arr.pop()。这是从数组中删除一个项目而不是将其放在任何位置。因此,您的数组少了一个项目。

  2. 您再次呼叫arr.pop(),因此您要从阵列中删除另外一项。

  3. 您可以使用splice(0,0...)代替unshift()。这将在项目的开头添加一个项目。 (push()!important

  4. 你真的需要传递和参数来说明数组应该旋转多少次?您可以根据目的使用阵列的长度吗?

答案 3 :(得分:0)

要实现您的目标,为什么需要pop()loop,只需两次splice()即可。

arr.splice(0,0, ...arr.splice(arr.length-num));

&#13;
&#13;
function rotate(arr, num) {
   arr.splice(0,0, ...arr.splice(arr.length-num));
   return arr;
}

var arr =["Harry","Sarah","Oscar","Tina"];
rotate(arr, 2);
console.log(arr);
&#13;
&#13;
&#13;