a.二维数组转为一维数组:
i.reduce() 方法
接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的
语法:array.reduce(function(total,currentValuue,currentIndex,arr),initiaValue)
let arr = [
[1, 4, 5, 6],
[8, 4, 7, 6],
[1, 5, 10, 47]
];
let arr1 = arr.reduce((total, currentValue) => {
return total.concat(currentValue);
});
console.log(arr1);
ii.map()
map()
方法定义在JavaScript的Array
中,返回一个新的数组,新返回数组中的每个元素为原始数组的每一个元素分别调用map中的回调函数处理后的值
注意:
- 不会对空数组进行检测
- 不会改变原始数组(返回新数组)
- 不会为数组中缺少的元素调用回调函数
- 除数组对象外,
map()
可由具有length属性且具有已按数字编制索引名的任何对象使用(如字符串对象)
语法:
array.map(function(currentValue, index, arr), thisIndex)
currentValue
:必须。当前元素的的值。index
:可选。当前元素的索引。arr
:可选。当前元素属于的数组对象。thisValue
:可选。对象作为该执行回调时使用,传递给函数,用作"this
"的值
let arr = [
[1, 4, 5, 6],
[8, 4, 7, 6],
[1, 5, 10, 47]
];
function flatten(arr) {
/**
* ...arr ==> 等价于 [1, 4, 5, 6] [8, 4, 7, 6] [1, 5, 10, 47]
* currentValue => 等价于 上面的一个个一维数组
*/
return [].concat(...arr.map(currentValue => Array.isArray(currentValue) ? flatten(currentValue) : currentValue))
}
var arr2 = flatten(arr);
console.log(arr2);
iii.apply()
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
可以将一个数组默认的转换为一个参数列表:[param1,param2,param3] 转换为 param1,param2,param3
let arr = [
[1, 4, 5, 6],
[8, 4, 7, 6],
[1, 5, 10, 47]
];
var arr2 = [].concat.apply([], arr);
console.log(arr2);
iv.split()
通过将数组转变成字符串,利用str.split(',')
实现
var arr = [
[1, 4, 5, 6],
[8, 4, 7, 6],
[1, 5, 10, 47]
];
var arr1 = (arr + '').split(',');
// var arr1 = arr.toString().split(',');
// var arr1 = arr.join().split(',');
console.log(arr1);