在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js如何找出數(shù)組中重復(fù)最多的元素

js如何找出數(shù)組中重復(fù)最多的元素

如下array中 js如何找出數(shù)組中重復(fù)最多的元素(盡量用es6以上的語法,簡潔點)

let ary = ['趙', '錢', '孫', '孫', '李', '周', '李', '周', '李'];

補充: 2018-7-17 10:42:53
其實我最開始是用mockjs做的一個關(guān)于數(shù)組的練習, 現(xiàn)在這個問題就是func10的需求部分, demo=>
https://codepen.io/vizocn/pen...

func10現(xiàn)在還未完成, 想請教各位看有沒有更好更簡潔的方法解決.
初始數(shù)組數(shù)據(jù)結(jié)構(gòu)如下圖
圖片描述

回答
編輯回答
尤禮

hfhan 的答案很高效,不過對這個問題只能找出第一個達到最多的情況,如果有多個同樣最多不好說??!我在此基礎(chǔ)上改寫了一個,支持多個最多情況

function search(arr){
    var maxCount = 0,
        maxItem = '',
        obj = {}
    arr.forEach(function(item){
        obj[item] ? (obj[item].count += 1) : obj[item] = {count: 1}
        obj[item].count > maxCount && (maxCount = obj[item].count, maxItem = item)
        obj[item].count == maxCount && (maxItem = maxItem+','+item)
    })
    //return {item:maxItem,count:maxCount}
    return maxItem
}
2017年2月2日 11:52
編輯回答
艷骨

更新了一下最多可能有多個的情況

let ary = ['趙', '錢', '孫', '孫', '李', '周', '李', '周', '李']
let dary = Array.from(new Set(ary))
let s = JSON.stringify(ary)
let maxStr = dary.reduce((res, val) => {
  let count = s.match(new RegExp(`"${val}"`, 'g')).length
  return count >= res[0].count ? [{val, count},...res] : [...res,{val, count}]
}, [{count: 0}])
maxStr = maxStr.filter(val => (val.count === maxStr[0].count))
console.log(maxStr)

另外借鑒了hfhan的寫法

let maxCount = 0
let maxStr = ary.reduce((res, val) => {
    res[val] = res[val] ? ++res[val] : 1
    maxCount = res[val] > maxCount ? res[val] : maxCount
    return res
}, {})
maxStr = Object.entries(maxStr).filter(val => val[1] === maxCount)
console.log(maxStr)
2018年3月11日 03:39
編輯回答
終相守
      let ary = ['趙', '錢', '孫', '孫', '李', '周', '李', '周', '李'];
      let arr = []
      for(var i = 0; i< ary.length; i++) {
        if(arr.indexOf(ary[i]) === -1) {
          arr.push(ary[i])
        }
      }
2018年5月1日 06:11
編輯回答
心癌
const d = {};
let ary = ['趙', '錢', '孫', '孫', '李', '周', '李', '周', '李'];
ary.forEach(k => !d[k] ? d[k] = 1 : d[k]++);
const max = Object.keys(d).sort((a, b) => d[b] - d[a])[0];
console.log(max)

不算定義變量的話就2行 夠簡潔了吧

const d = {};
let ary = ['趙', '錢', '孫', '孫', '李', '周', '李', '周', '周', '李'];
ary.forEach(k => !d[k] ? d[k] = 1 : d[k]++);
const result = Object.keys(d).sort((a, b) => d[b] - d[a]).filter((k, i, l) => d[k] === d[l[0]]);
console.log(result)

更新了一下 result 是現(xiàn)在是數(shù)組結(jié)果 最長數(shù)量一樣的值都會列出。

如果只取最大值還是建議使用hfhan那種方式,比較正統(tǒng),我這算 奇技淫巧 代碼看起來短其實多了2次循環(huán),不過如果你有把重復(fù)數(shù)量從大到小排序的需求倒是可以用用

2017年5月14日 01:52
編輯回答
單眼皮
function search(arr){
    var maxCount = 0,
        maxItem = '',
        obj = {}
    arr.forEach(function(item){
        obj[item] ? (obj[item].count += 1) : obj[item] = {count: 1}
        obj[item].count > maxCount && (maxCount = obj[item].count, maxItem = item)
    })
    //return {item:maxItem,count:maxCount}
    return maxItem
}
2018年4月9日 19:39