2015-11-02 25 views
4

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

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

你所說的'shift'意思? 你能提供'input'數組和'expected'數組嗎? – Rayon

+0

你是指這個功能? [Array.shift](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift)? – Grundy

+0

如果你從數組的開始處開始而不是向後循環,就像你已經在做的那樣將所有元素滑動到循環中。儘管您需要保存原始第一個元素的值並將其從函數中返回。 – nnnnnn

回答

5

這是因爲你是一個怎樣的迭代,你是在ii+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>

+0

啊,是的,這是有道理的。這非常令人沮喪,謝謝。 –

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]); 

希望這將有助於