JS]プログラマーコードテスト練習|ハッシュ-ベストアルバム


質問リンク:アルバム
1.質問
ストリーミングサイトでは、最も多く再生された曲を2曲集め、ベストアルバムを発売します.曲は唯一の番号で区切られており、収録曲の基準は以下の通りである.
まずは
  • でたくさんの曲が流れたタイプを収録
  • まずは
  • タイプで放送された曲を収録
  • タイプで同じ再生回数の曲のうち、まず唯一番号の低い曲を収録する.
  • 曲タイプを表す文字列配列タイプと、曲の再生回数を表す整数配列シナリオを指定する場合は、solution関数を完了し、最適なアルバムを入れる曲の一意の番号を順番に返します.
    2.I/O例

    3.解答
    function solution(genres, plays) {
      let table = new Map();
      const genre = genres.map((v, i) => [v, plays[i]]);
    
      genre.forEach(([genre, play], index) => {
         // table에 장르가 있다면 그걸 가져오고 없으면 초기값
        const data = table.get(genre) || { total: 0, songs: [] };
        table.set(genre, {
          total: data.total + play,
          songs: [
            ...data.songs, // 기존 값을 복사
            {
              play, // 추가할 오브젝트 : 재생횟수, 인덱스
              index,
            },
          ]
            .sort((a, b) => b.play - a.play) // play 기준 내림차순으로 정렬
            .slice(0, 2), // top 2만 slice
        });
      });
    
      return [...table.entries()] // [key, value ]
        .sort((a, b) => b[1].total - a[1].total) // 총 재생수를 기준으로 내림차
        .flatMap((item) => item[1].songs)
        .map((song) => song.index);
    }
    
  • [タイプ、再生数]のタイプ配列.
  • [
      [ 'classic', 500 ],
      [ 'pop', 600 ],
      [ 'classic', 150 ],
      [ 'classic', 800 ],
      [ 'pop', 2500 ]
    ]
  • 体裁にforeachを加える.(forEachは各アレイ要素に対して一度に提供できる関数)
  • data table(map)では、タイプがキー値の場合はキー値、ない場合は{total:0,歌曲:[]}の場合は初期値
  • となる.
  • table.setを使用すると、totalは各タイプの再生数をマージすることができ、曲は再生数とインデックス
  • を含むことができる.
  • 曲はプレイ基準で降順に並べてスライス(top 2のみ)

  • Object.entries()
    このオブジェクト.entries()メソッドは、指定したオブジェクトの一意の列文字列キー属性「キー、値」ペアの配列を返します.ループがプロトタイプチェーンであるプロパティもリストされます...ループを使用するのと同じですが、には含まれません.for...in (mdn)
  • の再生数を基準とした昇順(まず総再生数が多いものを収録)
  • Array.prototype.flatMap() ( = flat() + map() )
    flatMap()メソッドは、まずマッピング関数を使用して各エンティティをマッピングし、その後、結果を新しい配列に平坦化します.これは深さが1の平面に続く後のマッピングと同じであるが,FlatMapは非常に有用であり,両者を一つの方法に統合するとより効率的である.(mdn)
  • [
      { play: 2500, index: 4 },
      { play: 600, index: 1 },
      { play: 800, index: 3 },
      { play: 500, index: 0 }
    ]
  • map曲の中でインデックス値のみの配列
  • を作成する
  • 最後の戻り値は
  • で終了する.