JS二维数组变一维数组的方法总结
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]