整理记录一下目前所使用过的JS拍平数组

一、正常JS方法

const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, 10, 11, 12, 13]],[14, 15]];
function deepFlatten(arr) {
    const newarr = [];
    const flatten = arr => {
        for (let i of arr) {
            if (!Array.isArray(i)) {
                newarr.push(i);
            } else {
                newarr.concat(flatten(i))
            }
        }
    }
    flatten(arr);
    return newarr;
}
console.log(deepFlatten(arr));  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

二、es6优化方法

const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, 10, 11, 12, 13]],[14, 15]];
const deepFlatten = arr=>[].concat(...arr.map(v=>Array.isArray(v)?deepFlatten(v) : v));
console.log(arr);   //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

.concat()用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
.map()原数组被“映射”成对应新数组或者获得对象数组中的特定属性值们。如下例子:

const users = [
  {name: "张含韵", "email": "zhang@email.com"},
  {name: "江一燕",   "email": "jiang@email.com"},
  {name: "李小涵",  "email": "li@email.com"}
];
const emails = users.map(function (user) { return user.email; });
console.log(emails.join(", "));   // zhang@email.com, jiang@email.com, li@email.com