新浦京娱乐场官网-301net-新浦京娱乐www.301net
做最好的网站

本文将从朴素的循环转换开始

大雅的数组降维——Javascript中apply方法的妙用

2016/02/18 · JavaScript · apply, 数组

原稿出处: ralph_zhu   

将多维数组(尤其是二维数组卡塔 尔(英语:State of Qatar)转变为生机勃勃维数组是业务支出中的常用逻辑,除了选拔节约财富的轮回转变以外,我们还是能利用Javascript的语言特征达成更为精练高贵的转移。本文将从节约的循环调换初叶,逐条介绍三种常用的转变方法,并借此轻松回想Array.prototype.concat方法和Function.prototype.apply方法。
以下代码将以把二维数组降维到生机勃勃维数组为例。

  1. 严格地实行节约的转变

JavaScript

function reduceDimension(arr) { var reduced = []; for (var i = 0; i < arr.length; i ) { for (var j = 0; j < arr[i].length; j ) { reduced.push(arr[i][j]); } } return reduced; }

1
2
3
4
5
6
7
8
9
function reduceDimension(arr) {
    var reduced = [];
    for (var i = 0; i < arr.length; i ) {
        for (var j = 0; j < arr[i].length; j ) {
            reduced.push(arr[i][j]);
        }
    }
    return reduced;
}

此方法思路轻松,利用再度循环遍历二维数组中的各种成分并置于新数组中。

 

  1. 利用concat转换
    先来回想一下MDN上对此该办法的牵线:
    “concat creates a new array consisting of the elements in the object on which it is called, followed in order by, for each argument, the elements of that argument (if the argument is an array) or the argument itself (if the argument is not an array).”

即只要concat方法的参数是多少个因素,该因素会被间接插入到新数组中;假如参数是一个数组,该数组的逐生机勃勃要素将被插入到新数组中;将该天性应用到代码中:

JavaScript

function reduceDimension(arr) { var reduced = []; for (var i = 0; i < arr.length; i ){ reduced = reduced.concat(arr[i]); } return reduced; }

1
2
3
4
5
6
7
function reduceDimension(arr) {
    var reduced = [];
    for (var i = 0; i < arr.length; i ){
        reduced = reduced.concat(arr[i]);
    }
    return reduced;
}

arr的每三个元素都以三个数组,作为concat方法的参数,数组中的每八个子成分又都会被单独插入进新数组。
选用concat方法,大家将另行循环简化为了单重循环。

 

  1. 利用apply和concat转换
    依照规矩,先来回看一下MDN上对此apply方法的介绍:
    “The apply() method calls a function with a given this value and arguments provided as an array.”

即apply方法会调用五个函数,apply方法的首先个参数会作为被调用函数的this值,apply方法的第叁个参数(二个数组,或类数组的靶子卡塔 尔(英语:State of Qatar)会作为被调用对象的arguments值,相当于说该数组的黄金年代大器晚成要素将会相继成为被调用函数的各样参数;将该本性应用到代码中:

function reduceDimension(arr) { return Array.prototype.concat.apply([], arr); }

1
2
3
function reduceDimension(arr) {
    return Array.prototype.concat.apply([], arr);
}

arr作为apply方法的第一个参数,本人是二个数组,数组中的每贰个因素(依然数组,即二维数组的第二维卡塔 尔(阿拉伯语:قطر‎会被视作参数依次传入到concat中,效果等同[].concat([1,2], [3,4], [5,6])。
运用apply方法,我们将单重循环优化为了意气风发行代码,十分轻易有型有木有啊~

读者也可参谋本文思路,自个儿行使递归完结N维数组降维的逻辑。

3 赞 8 收藏 评论

图片 1

本文由新浦京娱乐场官网-301net-新浦京娱乐www.301net发布于301net网站建设,转载请注明出处:本文将从朴素的循环转换开始

您可能还会对下面的文章感兴趣: