Code-kata 7日目

1121 ワード

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

function moreThanHalfObject(nums) {
  const result = {};
  nums.forEach((x) => {
    if (result[x]) {
      result[x] = result[x] +1;
    }
    else {
      result[x] = 0 + 1;
    }
  })
  return result
}

function moreThanHalf(nums) {
  let obj = moreThanHalfObject(nums);
  let arr = Object.values(obj);
  let max = Math.max(...arr)
  return Number(getKeyByValue(obj, max));
}
どうすればいいか考えて、制作対象を決めました.それぞれの数字をキーに、その数字をvalueとして展開した方が良いと思います.そしてvalueを配列して最大値を求めるのがここから問題です.オブジェクト値のキー値をどのように見つけるかは難しい問題です.配列であればindexOfと同じ方法がありますが・・・
Stackoverflowの力を借りました.findの方法で見つけました.
function moreThanHalf(nums) {
  const newArray = nums.sort();
  const index = Math.floor(newArray.length/2);
  return newArray[index];
}
以下、同期の解答を参考にします.意味は非常に簡潔で要約されている.昇順で整理すると、最も頻度の高い数字が自然に中央になります.配列の長さを2で割ると、最大周波数の要素のインデックスになります.Mathは、配列の長さが奇数である可能性があるためです.床に置いてください.