1.查找数组中每一个元素出现的次数
// 方法一:
var names1 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
var countedNames = names1.reduce(function(allNames, name) {
if(name in allNames) {
allNames[name]++
} else {
allNames[name] = 1
}
return allNames
}, {})
console.log(countedNames) // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
// 方法二:
function fn1(arr) {
let tempObj = {}
for (let i = 0
tempObj[arr[i]] ? tempObj[arr[i]]++:tempObj[arr[i]] = 1
}
console.log(tempObj)
return tempObj
}
fn1(names1)
2.查找数组中出现次数最多的一个元素,并输出次数
var names2 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
function fn(arr) {
let tempObj = {}
let newObj = {
key:null,
num: 0
}
for (let i = 0
tempObj[arr[i]] ? tempObj[arr[i]]++:tempObj[arr[i]]=1
}
for (let key in tempObj) {
if (tempObj[key] > newObj.num) {
newObj.key = key
newObj.num = tempObj[key]
}
}
return newObj
}
fn(names2) // {"key":"Alice","num":2}
3.第一次出现的下标
var names3 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
function fn3(arr) {
let tempObj = {}
for(let i = 0;i < arr.length; i++) {
if (tempObj[arr[i]]) {
tempObj[arr[i]].num++
} else {
tempObj[arr[i]] = {
num: 1,
firstIndex: i
}
}
}
return tempObj
}
fn3(names3) // {"Alice":{"num":2,"firstIndex":0},"Bob":{"num":1,"firstIndex":1},"Tiff":{"num":1,"firstIndex":2},"Bruce":{"num":1,"firstIndex":3}}