求数组中每个元素出现的次数

220 阅读1分钟

法1 for循环+声明空数组

function repNumber() {
    const arr = [6, 6, 8, 7, 8, 7, 6, 7, 6, 6, 7]
    const arrSix = []
    const arrSeven = []
    const arrEight = []
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] === 6) {
            arrSix.push(arr[i])
        }
        if (arr[i] === 7) {
            arrSeven.push(arr[i])
        }
        if (arr[i] === 8) {
            arrEight.push(arr[i])
        }
    }
    return `6:${arrSix.length}次,7:${arrSeven.length}次,8:${arrEight.length}次`
}

console.log(repNumber())//6:5次,7:4次,8:2次

法2 forEach遍历+声明空数组

function repLetter() {
    const arr = ['a', 'b', 'c', 'a', 'c', 'b', 'b', 'a', 'c', 'b', 'a']
    const a = []
    const b = []
    const c = []
    arr.forEach(item => {
        if (item === 'a') {
            a.push(item)
        }
        if (item === 'b') {
            b.push(item)
        }
        if (item === 'c') {
            c.push(item)
        }
    })
    return `a:${a.length}次,b:${b.length}次,c:${c.length}次`
}

console.log(repLetter())//a:4次,b:4次,c:3次

法3 filter()方法

function repMenus() {
    const arr = ['红烧肉', '大闸蟹', '红烧肉', '大闸蟹', '大闸蟹', '武昌鱼', '红烧肉']
    const meatArr = arr.filter(item => item === '红烧肉')
    const fishArr = arr.filter(item => item === '武昌鱼')
    const crapArr = arr.filter(item => item === '大闸蟹')
    return `红烧肉:${meatArr.length}次,武昌鱼:${fishArr.length}次,大闸蟹:${crapArr.length}次`
}

console.log(repMenus())//红烧肉:3次,武昌鱼:1次,大闸蟹:3次

法4 reduce()方法

const arr = ['Lily', 'lucy', 'Alice', 'lily', 'Alice', 'Bob', 'Jane', 'Alice']
function repCount(arr) {
    const obj = arr.reduce((sum, item) => {
        if (item in sum) {//item in sum 等价于 sum[item]
            sum[item]++
        } else {
            sum[item] = 1
        }
        return sum
    }, {})
    return obj
}
console.log(repCount(arr))
//{ Lily: 1, lucy: 1, Alice: 3, lily: 1, Bob: 1, Jane: 1 }
// 代码优化(if-else 改成三元表达式)
const arr = ['Lily', 'lucy', 'Alice', 'lily', 'Alice', 'Bob', 'Jane', 'Alice']
function repCount(arr) {
    const obj = arr.reduce((sum, item) => (sum[item] ? sum[item]++ : (sum[item] = 1), sum), {})
    return obj
}
console.log(repCount(arr))
//{ Lily: 1, lucy: 1, Alice: 3, lily: 1, Bob: 1, Jane: 1 }