2021-js++全修班-->54数组扁平化、去重与排序(全网最全)

214 阅读1分钟

54数组扁平化、去重与排序

54数组扁平化、去重与排序1

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>54数组扁平化、去重与排序</title>
</head>
<body>
<script>
  let arr = [9, 20, 4, [1, 2, 3, 4], [2, 3, 4, [1, 2, 3, [1, 2, 3]], 5], [1, 2, 3, 4], [3, 4, 5, 9]]

  console.log(flatten(arr));

  function flatten(arr) {
    let _arr = arr || [],
      fArr = [],
      len = _arr.length,
      item;
    for (let i = 0; i < len; i++) {
      item = _arr[i]
      if (_isArr(item)) {
        fArr = fArr.concat(flatten(item))
      } else {
        fArr.push(item)
      }
    }

    return fArr = Array.from(new Set(fArr)).sort((a, b) => {
      return a - b
    })

    function _isArr(item) {
      return {}.toString.call(item) === '[object Array]'
    }
  }
</script>
</body>
</html>

54数组扁平化、去重与排序2

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>54数组扁平化、去重与排序</title>
</head>
<body>
<script>
  let arr = [40,9,20,4,[1, 2, 3, 4], [2, 3, 4, [1,2,3,[1,2,3]],5], [1, 2, 3, 4], [3, 4, 5, 9]]



  Array.prototype.flatten = function () {
    let _arr = this,
      toStr = {}.toString

    if (toStr.call(_arr) !== "[object Array]"){
      throw new Error('必须是数组')
    }

    let fArr = []
    _arr.forEach(function (item) {
      if (toStr.call(item) === "[object Array]"){
        fArr = fArr.concat(item.flatten())
      }else {
        fArr.push(item)
      }
    })

    return fArr = Array.from(new Set(fArr)).sort((a,b)=>{
      return a - b
    });
  }

  console.log(arr.flatten());
</script>
</body>
</html>

54数组扁平化、去重与排序3

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>54数组扁平化、去重与排序</title>
</head>
<body>
<script>
  let arr = [40,9,20,4,[1, 2, 3, 4], [2, 3, 4, [1,2,3,[1,2,3]],5], [1, 2, 3, 4], [3, 4, 5, 9]]



  Array.prototype.flatten = function () {
    let _arr = this,
      toStr = {}.toString

    if (toStr.call(_arr) !== "[object Array]"){
      throw new Error('必须是数组')
    }

    let fArr = []
    
    return  _arr.reduce(function (prev,item) {
      let newArr = prev.concat(
        toStr.call(item) === '[object Array]' ? item.flatten() : item
      )
      return Array.from(new Set(newArr)).sort((a,b)=>{
          return a - b
        });
    },[])



    // return fArr = Array.from(new Set(fArr)).sort((a,b)=>{
    //   return a - b
    // });
  }

  console.log(arr.flatten());
</script>
</body>
</html>

54数组扁平化、去重与排序4

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>54数组扁平化、去重与排序</title>
</head>
<body>
<script>
  let arr = [40, 9, 20, 4, [1, 2, 3, 4], [2, 3, 4, [1, 2, 3, [1, 2, 3]], 5], [1, 2, 3, 4], [3, 4, 5, 9]]


  const flatten = (arr) => arr.reduce((prev, item) => prev.concat({}.toString.call(item) === '[object Array]' ? flatten(item) : item), [])


  function compare(a, b) {
    return a - b
  }


  console.log(Array.from(new Set(flatten(arr))).sort(compare));
</script>
</body>
</html>

54数组扁平化、去重与排序5

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>54数组扁平化、去重与排序</title>
</head>
<body>
<script>
  let arr = [40, 9, 20, 4, [1, 2, 3, 4], [2, 3, 4, [1, 2, 3, [1, 2, 3]], 5], [1, 2, 3, 4], [3, 4, 5, 9]]

  console.log(Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>a-b));

</script>
</body>
</html>