最初のn用語の進行で重複する要素を見つけるJavaScript
たとえば、最初のn個の自然数を含む数の配列が与えられたが、1つの要素が配列に2回出現するため、要素の総数はn+1であるとします。私たちの仕事は、配列を受け取り、線形時間で2回出現する数値を返す関数を作成することです。
方法1:Array.prototype.reduce()を使用する
これは少しトリッキーなアプローチですが、記述されたコードに関して最も圧縮されています。まず、そのコードを見てみましょう-
const arr = [1,4,8,5,6,7,9,2,3,7]; const duplicate = a => a.reduce((acc, val, ind) => val+acc- (ind+1))+a.length-1; console.log(duplicate(arr));
ここでは、reduce関数を使用しました。このコールバックは、配列の要素ごとに1回動作します。この場合、3つの引数を取ります。
- acc→アキュムレータ、前のパスで返された値、および
- val→現在の要素値
- ind→現在の要素のインデックス
それでは、この配列にコードを適用しましょう-
[ 2, 3, 1, 2]
この配列の長さは4であるため、コールバック関数のパスは合計4つになるはずですが、reduce()関数にinitialValue引数を指定していないため、反復はインデックス1から開始され、アキュムレータには最初に次の値が割り当てられます。ゼロ番目のインデックスなので、合計3つのパスがあります。
ファーストパス
acc = 2, val = 3, ind = 1 return value = 2+3 - (1+1) = 3
セカンドパス
acc = 3, val = 1, ind = 2 return value = 3+1 - (2+1) = 1
サードパス
acc = 1, val = 2, ind = 3 return value = 1+2 - (3+1) = -1
アレイの終了
したがって、配列から-1が返され、その後
-1 + (4-1) = -1 + 3 = 2
はduplicate()関数から返されますが、これは実際には正しい結果です。
方法2:Array.prototype.forEach()
このメソッドでは、配列を反復処理してその合計を取得し、そこから最初の(n-1)個の自然数の合計を減算します。nは配列の長さ、残りは2回繰り返された数なので、次のようになります。
例
const arr = [1,4,8,5,6,7,9,2,3,7]; const duplicate = a => { let sum = 0; const { length: n } = a; a.forEach(num => sum += num); return sum - ((n*(n-1))/2); } console.log(duplicate(arr));
出力
コンソールの出力は-
になります7
-
JavaScript配列の最初の要素と最後の要素?
配列は要素のグループです。各要素には独自のインデックス値があります 。これらのインデックスを使用して任意の要素にアクセスできます 。ただし、最後の要素の場合、配列に存在する要素の数がわかるまで、インデックスはわかりません。この場合、ロジックを使用する必要があります。これらの詳細について簡単に説明しましょう。 最初の要素へのアクセス 最初の要素のインデックスがわかっているので、その要素の値を非常に簡単に取得できます。配列をarrにします 。その場合、最初の要素の値は arr [0]です。 。 例 次の例では、array1およびarray2という配列があります。 両方の配列は「4」要素で構成され
-
JavaScript配列で要素を検索する方法は?
以下は、JavaScript配列内の要素を検索するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>