如下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
}更新了一下最多可能有多個的情況
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)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ù)量從大到小排序的需求倒是可以用用
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
}北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。