Skip to content

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组 #19

Description

@lvwxx

已知数组

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

解法一

function flat(arr) {
  return [...new Set(arr.flat(Infinity).sort((a,b) => a - b))]
}

解法二

function flat(arr) {
  return [...new Set(arr.toString().split(',').sort((a,b) => a-b))]
}

解法三(使用递归实现 flat 函数)

function flat(arr) {
  const flatArr = arr.reduce((res, next) => Array.isArray(next) ? res.concat(flat(next)) : res.concat(next),[])
  return [...new Set(flatArr.sort((a,b) => a - b))]
}

解法四(非递归实现 flat 函数)

// 使用 栈 来实现
// 由于栈后进先出的特点,先把原数组倒序
function flat(arr) {
  let stack = []
  let res = []

  for (let i = arr.length - 1; i >= 0; i--) {
    stack.push(arr[i])
  }

  while (stack.length) {
    const item = stack.pop()
    if (Array.isArray(item)) {
      for (let i = item.length - 1; i >= 0; i--) {
        stack.push(item[i])
      }
    } else {
      res.push(item)
    }
  }

  return [...new Set(res)].sort((a,b) => a - b)
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    arithmeticJavaScript commonly used algorithmquestionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions