我一直在尝试为一些基本的数组方法编写函数,但现在我坚持不使用拼接重新创建移位。任何建议将不胜感激。如何编写一个没有拼接的移位功能
MyShift = function (array) {
for (i = array.length - 2; i >= 0; i--) {
array[i] = array[i + 1];
}
--array.length;
};
我一直在尝试为一些基本的数组方法编写函数,但现在我坚持不使用拼接重新创建移位。任何建议将不胜感激。如何编写一个没有拼接的移位功能
MyShift = function (array) {
for (i = array.length - 2; i >= 0; i--) {
array[i] = array[i + 1];
}
--array.length;
};
这是因为你是一个怎样的迭代,你是在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>
啊,是的,这是有道理的。这非常令人沮丧,谢谢。 –
您可以使用Array.prototype.shift()
方法。
该方法从数组中移除第一个元素并返回该元素。此方法更改数组的长度。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
你可以让这样的事情。
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]);
希望这将有助于
你所说的'shift'意思? 你能提供'input'数组和'expected'数组吗? – Rayon
你是指这个功能? [Array.shift](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift)? – Grundy
如果你从数组的开始处开始而不是向后循环,就像你已经在做的那样将所有元素滑动到循环中。尽管您需要保存原始第一个元素的值并将其从函数中返回。 – nnnnnn