Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

最初の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

  1. JavaScript配列の最初の要素と最後の要素?

    配列は要素のグループです。各要素には独自のインデックス値があります 。これらのインデックスを使用して任意の要素にアクセスできます 。ただし、最後の要素の場合、配列に存在する要素の数がわかるまで、インデックスはわかりません。この場合、ロジックを使用する必要があります。これらの詳細について簡単に説明しましょう。 最初の要素へのアクセス 最初の要素のインデックスがわかっているので、その要素の値を非常に簡単に取得できます。配列をarrにします 。その場合、最初の要素の値は arr [0]です。 。 例 次の例では、array1およびarray2という配列があります。 両方の配列は「4」要素で構成され

  2. 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>