0

私は現在、javascript のようないくつかのメソッドを練習していますshift(), unshift(), push(), pop()。配列、開始点、終了点の 3 つの引数を取る小さな関数を書きたいと思います。これは、配列の一部を切り取ってから、新しい配列と切り取った部分の両方を返すために使用されます。役に立つことでも大したことでもなく、JavaScript を練習したいだけです。

しかし、原因がわからない奇妙なことに遭遇しました。

ここが奇妙な部分です

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];

for(var i=0; i<a2.length; i++){
a1.unshift(a2.shift())
}

だから私はこのコードを書きました、そして期待される結果は

a1 = [1,2,4,5,6,7,8,9]
a2 = []

しかし、コードを実行すると、これが実際に起こったことでした

a1 = [5,6,7,8,9]
a2 = [4,3,2,1]

関数が十分な時間ループしていないように見えるので、 a2.length を整数に変更しようとしました: 9

コードを作るもの

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];

for(var i=0; i<9; i++){
a1.unshift(a2.shift())
}

そして、それはうまくいきました!

次に、これへのアプローチを変更します

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1]
var aLength = a2.length;
for(var i=0; i<aLength; i++){
a1.unshift(a2.shift())
}

そして、これもうまくいきました!!!

その理由を誰か教えてくれませんか??? どうすればループを改善できますか?

お時間をいただき、誠にありがとうございました。

4

3 に答える 3

1

while ループを使用すると、これを簡単に行うことができます

while (a2.length > 0)
{
    a1.unshift(a2.shift());
}
于 2013-07-17T11:08:26.370 に答える
0

Javascript 配列: Shift() メソッド

shift() メソッドは pop() メソッドに似ていますが、配列の先頭でのみ機能します。shift() メソッドは、指定された配列から最初の要素を取り出して返します。これにより、メソッドが呼び出された配列が変更されます。

したがって、 a2.shift() を実行すると、実際には配列が変更 (配列内の要素の数が減少) されるため、効果が得られます。

于 2013-07-17T10:47:48.647 に答える
0

ループ条件は反復ごとに再評価され、a2.length常に変化しています。

初期値を使用する場合は、事前にキャッシュしてください。

var n = a2.length;
for (var i = 0; i < n; i++) {
   a1.unshift(a2.shift());
}
于 2013-07-17T10:55:10.983 に答える