[プログラマー]レベル1私は同じ数字が好きではありません.


中間文字を入力


問題の説明
配列arr.アレイarrの各要素は、0から9の数字で構成されています.この場合、アレイarrは連続して表示される数字を1つだけ保持し、すべて削除しようとします.
ただし、削除後に残数を返す場合は、アレイarr内の要素の順序を維持する必要があります.
たとえば、
  • arr=[1,1,3,0,1]は[1,3,0,1]を返します.
  • arr=[4,4,4,3]は[4,3]を返します.
  • 配列arrから連続して現れる数字を削除し、残りの数を返すsolution関数を完了してください.
    制限
  • アレイarrサイズ:1000000以下の自然数
  • アレイarrの要素サイズ:0以上9以下の整数
  • 入出力例
    arrreturn[1,1,3,3,0,1,1][1,3,0,1][4,4,4,3,3][4,3]
    数位問題を読んだ後の思考
    1.アレイ内の要素を1つずつ比較します.同じ場合、アレイに入れるべきですか、それともアレイに入れないべきですか.
    2.条件文を書いてもいいですよね?同じ時、違う時、別れる
    3.複文を書きますか.
    // ( solution.js )
    function solution(arr) {
      var answer = [];
      
      for( let i = 0 ; i < arr.length ; i++){
        if( arr[i] !== arr[i+1] ){
          answer.push(arr[i]);
        }
      }
      return answer;
    }
    function solution(arr)
    {
        return arr.filter((val, index) => val != arr[index+1]);
    }
    <ソース-モダンJavaScript Deep Dive>

    ❓ filter

  • filterメソッドは、その配列内のすべてのドキュメントを呼び出し、パラメータとして渡されるコールバック関数を繰り返し呼び出します.次に、コールバック関数の戻り値trueの要素のみからなる新しい配列を返します.この場合、元の配列は変更されません.
  • const numbers = [1,2,3,4,5];
    
    // numbers 배열에서 홀수인 요소만 필터링할 경우(1은 true로 평가된다)
    const odd = numbers.filter(item => item % 2);
    console.log(odd); // [1,3,5]
  • forEach、mapメソッドと同様に、filterメソッドは、その配列内のすべての要素を呼び出し、パラメータとして渡されるコールバック関数を繰り返し呼び出します.
  • forEachメソッドは、常に未定義を返します.
  • mapメソッドは、コールバック関数の戻り値からなる新しい配列を返します.
  • フィルタリング方法は、コールバック関数の戻り値trueのみを抽出する要素の新しい配列を返す.
  • filterメソッドのコールバック関数は、filterメソッドを呼び出す配列の요소값および인덱스を順次伝達し、filterメソッドを呼び出す配列自体、すなわちthisを伝達することができる.
    すなわち、filterメソッドは、コールバック関数を呼び出すときに、filterメソッドを呼び出す配列の要素値とインデックス、およびfilterメソッドを呼び出す配列の3つのパラメータを順次渡す(this).
  • // filter 메서드는 콜백 함수를 호출하면서 3개(요소값, 인덱스, this)의 인수를 전달한다.
    [1,2,3].filter( (item, index, arr) => {
      console.log(`요소값: ${item}, 인덱스: ${index}, this: ${JSON.stringify(arr)}`);
      return item % 2;
    });
    /*
    요소값: 1, 인덱스: 0, this: [1,2,3]
    요소값: 2, 인덱스: 1, this: [1,2,3]
    요소값: 3, 인덱스: 2, this: [1,2,3]
    */
    👀 問題を解いた後の思考

    次は繰り返し文でもforeach map filterを考えて