我一直在尝试为一些基本的数组方法编写函数,但现在我不再使用splice而重新创建shift。任何建议都将不胜感激。
MyShift = function (array) {
for (i = array.length - 2; i >= 0; i--) {
array[i] = array[i + 1];
}
--array.length;
};
答案 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]);
希望它会有所帮助