js找出陣列中出現最多的元素和次數

haqiu發表於2019-03-13

方法一 、利用物件

建立個空物件,遍歷目標陣列,並根據陣列元素是否存在與物件中進行物件屬性的新增和次數增加

遍歷完陣列得出結果物件後,遍歷物件找出最多元素和次數

var arr = [3, 5, 6, 5, 9, 8, 10, 5, 7, 7, 10, 7, 7, 7, 7, 10, 10, 10, 10, 10];
複製程式碼
function findMost(arr) {
    if (!arr.length) return
    if (arr.length === 1) return 1
    let res = {}
    let maxName, maxNum = 0
    // 遍歷陣列
    arr.forEach((item) => {
      res[item] ? res[item] += 1 : res[item] = 1
    })
    // 遍歷 res
    for (let r in res) {
      if (res[r] > maxNum) {
        maxNum = res[r]
        maxName = r
      }
    }
    return '出現次數最多的元素為:' + maxName + ', 出現次數為:' + maxNum;
}
複製程式碼

方法二、?改良版

去除物件遍歷,把比較放到陣列遍歷種

function findMost (arr) {
  if (!arr.length) return;
  if (arr.length === 1) return 1;
  let res = {};
  let maxName, maxNum = 0
  // 遍歷陣列
  arr.forEach((item) => {
    res[item] ? res[item] += 1 : res[item] = 1
    if (res[item] > maxNum) {
      maxName = item
      maxNum = res[item]
    }
  })
  return '出現次數最多的元素為:' + maxName + ', 出現次數為:' + maxNum;
}
複製程式碼

方法三、利用陣列的reduce方法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

reduce方法接受兩個引數,第一個是函式,第二個是初始值

函式內接受四個引數:計算後的結果或者初始值,當前值,當前下標,陣列本身

function findMost (arr) {
  if (!arr.length) return;
  if (arr.length === 1) return 1;
  let maxName, maxNum = 0
  let res = arr.reduce((res, currentNum) => {
    res[currentNum] ? res[currentNum] += 1 : res[currentNum] = 1
    if (res[currentNum] > maxNum) {
      maxNum = res[currentNum]
      maxName = currentNum
    }
    return res
  }, {})
  return '出現次數最多的元素為:' + maxName + ', 出現次數為:' + maxNum;
}
複製程式碼

相關文章