数组中元素出现的次数

104 阅读1分钟

数组中元素出现的次数

方法1 forEach()

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
arr.forEach(item => {
  if (obj[item]) {
    obj[item]++
  } else {
    obj[item] = 1
  }
})
console.log(obj) //{ a: 3, b: 1, c: 1 }

方法2 reduce()

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = arr.reduce((prev, item) => {
  prev[item] ? prev[item]++ : prev[item] = 1
  return prev
}, {})
console.log(obj);//{ a: 3, b: 1, c: 1 }

方法3 for...of...

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
for (let k of arr) {
  if (obj[k]) {
    obj[k]++
  } else {
    obj[k] = 1
  }
}
console.log(obj); //{ a: 3, b: 1, c: 1 }

方法4 for...in

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
for (let k in arr) {
  if (obj[arr[k]]) {
    obj[arr[k]]++
  } else {
    obj[arr[k]] = 1
  }
}
console.log(obj);//{ a: 3, b: 1, c: 1 }

方法5 for循环

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
for (let i = 0; i < arr.length; i++) {
  if (obj[arr[i]]) {
    obj[arr[i]]++
  } else {
    obj[arr[i]] = 1
  }
}
console.log(obj);//{ a: 3, b: 1, c: 1 }

方法6 map()

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
arr.map(item => {
  if (obj[item]) {
    obj[item]++
  } else {
    obj[item] = 1
  }
})
console.log(obj);//{ a: 3, b: 1, c: 1 }

方法7 filter()

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
arr.filter(item => {
  if (obj[item]) {
    obj[item]++
  } else {
    obj[item] = 1
  }
})
console.log(obj);//{ a: 3, b: 1, c: 1 }

方法8 some()

const arr = ['a', 'a', 'b', 'c', 'a']
const obj = {}
arr.some(item => {
  if (obj[item]) {
    obj[item]++
  } else {
    obj[item] = 1
  }
})
console.log(obj);//{ a: 3, b: 1, c: 1 }

深度检测

forEach()实现,上述其他的原理一样

const arr = ['a', 'a', 'b', 'c', ['a', 'b', ['a']]]
const obj = {}
function count(arr) {
  arr.forEach(item => {
    if (Array.isArray(item)) {
      count(item)
    } else {
      if (obj[item]) {
        obj[item]++
      } else {
        obj[item] = 1
      }
    }
  });
}
count(arr)
console.log(obj);//{ a: 4, b: 2, c: 1 }