如何在没有拼接的情况下编写移位函数

时间:2015-11-02 06:22:34

标签: javascript arrays function

我一直在尝试为一些基本的数组方法编写函数,但现在我不再使用splice而重新创建shift。任何建议都将不胜感激。

MyShift = function (array) {
    for (i = array.length - 2; i >= 0; i--) {
        array[i] = array[i + 1];
    }
    --array.length;
};

3 个答案:

答案 0 :(得分:5)

这是因为您正在迭代,您正在使用i更改i+1处的值然后向后移动,因此您将最后一个值分配给所有位置

MyShift = function(array) {
  for (var i = 0; i < array.length - 1; i++) {
    array[i] = array[i + 1];
  };
  --array.length;
};

var a = ['a', 'b', 'c'];
MyShift(a);
document.body.appendChild(document.createTextNode(a))

在上面的情况下,当你在第一次迭代时循环时,你有i=1,所以你有array[1] = array[2],所以数组变为[a, c, c],然后是i=0,所以你拥有array[0] = array[1],但由于上一次迭代已经更新了arra[1]的值,您将拥有[c,c,c]

MyShift = function(array) {
  snippet.log('src: ' + array)
  for (i = array.length - 2; i >= 0; i--) {
    array[i] = array[i + 1];
    snippet.log('loop ' + i + ': ' + array);
  }
  --array.length;
};

var a = ['a', 'b', 'c'];
MyShift(a);
snippet.log('Result: ' + a)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

答案 1 :(得分:1)

您可以使用Array.prototype.shift()方法执行此操作。

此方法从数组中删除第一个元素并返回该元素。此方法更改数组的长度。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

答案 2 :(得分:0)

你可以做这样的事情。

MyShift = function (array) {
    for (i =0; i<array.length; i++) {
        array[i] = array[i + 1];
        console.log(array[i]);
    }
    --array.length;
    return(array);
}; 
MyShift([1,2,3,4]);

希望它会有所帮助