数组降维
2017-07-24 本文已影响40人
Dl_毛良伟
如何将二维数组降到一维数组?
-
一 . 我们可以利用双重循环
let dimensionalityReduction = [];
for (let i in arrey){
for(let j in arrey[i]){
dimensionalityReduction.push(arrey[i][j]);
}
}
dimensionalityReduction即为降维后的一维数组.
-
二 . 利用concat转换
1.concat的作用: 如果concat方法的参数是一个元素,该元素会被直接插入到新数组中;如果参数是一个数组,该数组的各个元素将被插入到新数组中.
let dimensionalityReduction = [];
for (let i in arrey){
dimensionalityReduction.concat(arrey[i]);
}
arrey的每一个元素都是一个数组,作为concat方法的参数,数组中的每一个子元素又都会被独立插入进新数组。
利用concat方法,我们将双重循环简化为了单重循环。
2.concat的第二个作用: concat()方法用于合并两个或更多个数组。此方法不会更改现有的数组,而是返回一个新的数组。
var arr1 = ['a', 'b', 'c'];
var arr2 = ['d', 'e', 'f'];
var arr3 = arr1.concat(arr2);
// arr3 is a new array [ "a", "b", "c", "d", "e", "f" ]
-
三 . 利用apply和concat转换
apply方法
apply是所有函数都有的方法.它的签名如下:
func.apply(thisValue, [arg1, arg2, ...])
如果不考虑thisValue的影响,上面的调用等同于:
func(arg1, arg2, ...)
也就是说,apply允许我们将一个数组"解开"成为一个个的参数再传递给调用函数.
let dimensionalityReduction = [];
dimensionalityReduction = Array.prototype.concat.apply([], arrey);
- apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数
- arrey作为apply方法的第二个参数,本身是一个数组,数组中的每一个元素(还是数组,即二维数组的第二维)会被作为参数依次传入到concat中,效果等同于[].concat([1,2], [3,4], [5,6])。
利用apply方法,我们将单重循环优化为了一行代码,