var arr = ['apples','oranges','pears','grapes'];
for (var i=0; i<arr.length; i++) {
if (arr[i] == 'pears') {
arr.splice(i,0,'limes');
}
}
これをjsfiddleで実行しようとすると、ページがフリーズします。 i(arr.splice(2,0,'limes')
)の代わりに特定のインデックスを使用するか、アイテム(arr.splice(2,1)
)を削除しようとすると、jsfiddleもフリーズします。 forループなしでこれを行い、代わりに特定のインデックスを選択すると、うまくいきます。ここで何が間違っていますか? forループ内でスプライス作業(アイテムを削除せずに追加する)を行う方法はありますか?スプラインがforループで動作しないのはなぜですか?
FreeCodeCampのエディタをこのコードで使用すると、フリーズすることはありませんが、スプライスが使用されていないかのように元の配列に戻ります。ただし、変数を代入すると(forループのvar rem = arr.splice(i,1)
)、実際に配列自体を変更することなく(配列はまったく同じです)、削除された項目が返されます。
は、アレイ内の 'splice'のカスタム機能がありますプロトタイプ? – RamenChef
'arr.splice(i ++、0、 'limes');' < - ポストインクリメント 'i'で、一致した項目が前方にプッシュされると、ループの次の反復はそれに遭遇しません。 –
試してみてください:arr.splice(arr.indexOf( 'pears')、0、 'limes'); ' –