4

基本的に、shift() または splice() メソッド (またはその他のメソッド) を使用せずに、配列の最初の要素を返し、削除するにはどうすればよいでしょうか。

前もって感謝します!

4

2 に答える 2

6

「シフト」メソッドの背後にあるロジックは何ですか?

それは仕様に完全に記述されています。

基本的に、shift() または splice() メソッド (またはその他のメソッド) を使用せずに、配列の最初の要素を返し、削除するにはどうすればよいでしょうか。

このような制限の正当な理由はわかりませんが、ループを使用して、変更するインデックスまで、各エントリにその上のエントリの値を手動で割り当てることができます (最後から開始) length。配列を 1 つ減らします。このような漠然としたもの(これは何をするかの完全な実装ではないと確信してshiftいます):

実例| ライブソース

var n;
for (n = theArray.length - 2; n >= removeAt; --n) {
    theArray[n] = theArray[n+1];
}
--theArray.length;

length配列のプロパティを変更すると、長さを超えた要素が削除されます。

を使用して、配列の長さを変更せずに要素を削除することもできますdelete

delete theArray[removeAt];

配列の長さは変更されませんが、その場所に (まったく) エントリがなくなります。まばらになります(まだなかった場合)。これが機能するのは、deleteステートメントがオブジェクトからプロパティを削除し、型指定されていない JavaScript 配列が実際にはただのオブジェクトだからです

于 2013-09-05T06:36:35.087 に答える
0

これがあなたが探しているものだと思います。最初の文字を設定し、残りの文字列を追加し、finalString 変数の最初の文字を空の文字列に置き換えてから、firstLetter 変数に保存されている最初の文字を返します。

function remove(str){
  let firstLetter = '';
  let finalString = '';
  for(let i = 0; i < str.length; i++){
    if(i === 0){
      firstLetter = str[i];
    }
    finalString += str[i];
    if(i === 0){
      finalString = '';
    }
  }
  return firstLetter;
}

remove('hello');
于 2018-03-30T00:53:27.550 に答える