美文网首页
js 之 数组扁平化

js 之 数组扁平化

作者: Veycn | 来源:发表于2019-03-27 16:46 被阅读0次

var arr = [1,2,{a: 1, b: 2}, 5, [{}, [99, {g: 111}, [{}, {c: 12}]], 1, 'abc', Symbol('aaa')], null, undefined, true, [true, false, 21, [123], 4]] => [1,2,{a: 1, b: 2}, 5, {}, 99 ...]
这就是数组的扁平化。


var arr = [
    1, 2, 3, [
        {
            a: 12,
            c: 1
        },
        true,
        false,
        Symbol('a')
    ],
    10,
    [
        10,
        {
            name: 'vey',
            age: 12,
            sex: 'male'
        },
        false,
        [
            999,
            false,
            {
                p: 'this is a paragraph'
            }
        ]
    ]
]


function flatten(arr) {
    var arr = arr || [],
        res = [],
        len = arr.length
    for (var i = 0; i < len ; i ++){
        if(isArray(arr[i])){
            res = res.concat(flatten(arr[i]))
        }else {
            res.push(arr[i])
        }
    }
    return res
}

function isArray(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]'
}
console.log(flatten(arr));

唯一的缺点是不够优雅。

Array.prototype.flatten = function () {
    var res = []
    this.forEach(function (item) {
        Object.prototype.toString.call(item) === '[object Array]' ? res = res.concat(item.flatten()) : res.push(item)
    })
    return res
}
console.log(arr.flatten())

这样便会好很多.
reduce 方法实现

function flatten(arr) {
    arr = arr || []
    return arr.reduce(function (prev, next) {
        return Object.prototype.toString.call(next) === '[object Array]' ? prev.concat(flatten(next)) : prev.concat(next)
    }, [])
}

ES6

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

... 简书一行实在是看不了...

相关文章

  • 『JavaScript专题』之数组扁平化

    JavaScript专题之数组扁平化 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何...

  • js实现数组扁平化

    js实现数组扁平化 数组的扁平化,就是将一个嵌套多层的数组array(嵌套可以是任何层数)转换为只有一层的额数组。...

  • js 之 数组扁平化

    var arr = [1,2,{a: 1, b: 2}, 5, [{}, [99, {g: 111}, [{}, ...

  • js数组与对象常用操作方法

    一、Js相关数组操作 数组去除相同的 数组添加数数据 数组反转 打乱数组排序 取数组的前几个 数组扁平化 遍历对象...

  • 封装常用数组操作函数

    1. 数组扁平化 方法一 : 递归迭代数组 方法二 : 通过js原生 falt方法展开数组 方法三 通过正则...

  • 每天一个lodash方法(5)

    Array method 系列之五 —— 数组扁平化:flatten && flattenDeep && flat...

  • js数组扁平化

    扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 递归 e...

  • js数组扁平化

    1、 利用apply和concat转换 2、reduce 3、多维数组递归降维

  • js数组扁平化

    现在有一个需求: 多维数组=>一维数组; var arr = [1,2,[3,4,[5,6,[7,8]]],[9,...

  • Js数组扁平化

    什么是数组扁平化? ['a','b','c'] //这是一个拥有3个元素的数组,是一个一维数组(不存在数组嵌套)。...

网友评论

      本文标题:js 之 数组扁平化

      本文链接:https://www.haomeiwen.com/subject/saozvqtx.html