我一直在嘗試爲一些基本的數組方法編寫函數,但現在我堅持不使用拼接重新創建移位。任何建議將不勝感激。如何編寫一個沒有拼接的移位功能
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