It's all about
connecting the dots

数组去重和扁平化

一、问题

假定有一个多维数组:

const multidimensionalArray = [
  [1, 2, 3],
  [1, 3],
  [4, 5, 6],
  { a: 3 },
  null,
]

我们想获取与之对应的扁平化、去重了的的一维数组:

  1. 扁平化是指将数组转换为一维数组。
  2. 去重是指碰到相同的元素时,只保留一个。

该如何实现呢?

二、实现思路

数组去重其实就是new Set处理一下即可,这种去重方法写起来最简便,例如:

[...new Set([1, 2, 3, 2, 1, 3])] // [1, 2, 3]

数组扁平化其实就是先定义一个空数组tempArr,然后遍历原数组的元素,如果被遍历元素不是数组类型就直接添加到tempArr中,如果是数组类型则递归处理这个数组元素重复刚才的操作。在这个遍历过程中,其实我们可以直接一步到位做好是否为重复元素的判断,这样就不用另外做数组的去重处理了。

三、实现方案

const flattenArray = (arr) => {
  const tempArr = []
  const tempMap = new Map()

  const handleItem = (item) => {
    if (Array.isArray(item)) {
      item.forEach(handleItem)
      return
    }
    // 判断重复性,若重复则不添加
    if (tempMap.has(item)) {
      return
    }
    tempArr.push(item)
    tempMap.set(item, true)
  }

  handleItem(arr)

  return tempArr
}

 

赞(0) 打赏
版权声明:非商业用途转载请注明文章链接,商业用途转载请联系邮箱获取授权。
文章名称:《数组去重和扁平化》
文章链接:https://www.orzzone.com/flatten-array.html
商业联系:yakima.public@gmail.com
本站内容仅供个人学习交流,不做为任何投资、建议的参考依据,因此产生的问题需自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏