1 利用es5
的arr.reduce(callback[, initialValue])
实现:
var arr1 = [[0, 1], [2, 3], [4, 5]];
var arr2 = arr1.reduce((a, b) =>{ return a.concat(b)} );
2 利用 es6中的 map实现:
var arr1 = [[0, 1], [2, 3], [4, 5]]; function fn(arr) { return [].concat(...arr.map(item => Array.isArray(item) ? fn(item) : item)) } var arr2 = fn(arr1); 3 利用apply实现: var arr1 = [[0, 1], [2, 3], [4, 5]]; var arr2 = [ ].concat.apply( [ ], arr1 ) ; 4 通过将数组转变成字符串,利用str.split(',')实现。缺点是数组元素都变字符串了 var arr1 = [[0, 1], [2, 3], [4, 5]]; var arr2 = (arr1 + '').split(','); var arr2 = arr.toString().split(','); var arr2 = arr.join().split(','); 5 利用 ES6 的最新语法,Array.prototype.flat()。缺点是,有兼容性问题。优点是非常简单。var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] arr3.flat(Infinity); // [1, 2, 3, 4, 5, 6] // Infinity展开所有嵌套数组
var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5] 特殊说明:flat()方法会移除数组中的空项。但undefined、null仍会保留 var arr = [1, 2, undefined , 4, 5, null]; arr.flat(); // [1, 2, undefined , 4, 5, null]