优雅地实现多维数组降维

作者: anthozoan77 | 来源:发表于2016-03-02 00:23 被阅读881次

原理参考 优雅的数组降维——Javascript中apply方法的妙用。我的博客 if-true.com


现将几种思路由浅入深地依次整理出来,并从二维上升到多维数组。

1. 嵌套循环

对于二维数组来说很容易想到,但对于多维以及不定维度的情况,嵌套的层数是不一定的,复杂度也会大大增加。以二维数组为例。

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

2. 利用 concat 转换

如果 concat 方法的参数是一个元素,该元素会被直接插入到新数组中;如果参数是一个数组,该数组的各个元素将被插入到新数组中。同样以二维数组为例。

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

看似从两重循环减为一个循环,少了一半,仔细发现其实只是达到了降一维的作用。当维度上升时,并不好使。

3. 利用 apply 和 concat 转换

apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数。同样以二维数组为例。

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

这里甚至没有用到循环。

4. 多维情况

这里考虑维度不一定的情况,需要通过 instanceof 来判断数组的各个元素是否还是数组。于是有了下面的解决方案。

function reduceDimension(arr) {
    var tmp = arr;
    var result = arr;
    while(tmp instanceof Array) {
        result = Array.prototype.concat.apply([], result);
        tmp = tmp[0];
    }
    return result;
}

暂时想到这么多了。

相关文章

  • 优雅地实现多维数组降维

    原理参考 优雅的数组降维——Javascript中apply方法的妙用。我的博客 if-true.com。 现将几...

  • PCA 主成分分析

    主成分根据,多维字段分析降维成几个成分 多维数组降维 几个特征向量对应几个特征空间

  • 深度学习入门--NumPy多维数组的运算

    想要高效地实现神经网络,离不开numpy多维数组的运算。 一维数组 先介绍numpy一维数组: 如上所示,数组的维...

  • 50个js方法

    1 .将一个多维数组降维 1 .已有的方法 2 .实现的关键以及细节 遍历数组的方式 1 .(for 循环,for...

  • 多维数组的地址问题

    多维数组地址问题采取降维的思想,n维数组的元素为n-1维数组,n维数组名为其元素的首地址。 http://www....

  • Java学习day-13:多维数组和冒泡排序

    一、多维数组: 多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组。 1.二维数组: (1)二维...

  • Scala菜鸟的进阶之路之数组相关操作四

    多维数组 和Java一样,多维数组是通过数组的数组来实现的。举例来说,Double的二维数组类型为Array[A...

  • 【精致Java教程】23:数组(二)

    这篇文章讲多维数组。多维数组就是数组的元素也是数组,有几维就叫几维数组。例如二维数组就是元素都是一维数组的数组。所...

  • Java多维数组的用法!

    除了一维数组和二维数组外,Java中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。 经...

  • 数组处理

    多维数组 转为一维数组

网友评论

    本文标题:优雅地实现多维数组降维

    本文链接:https://www.haomeiwen.com/subject/fwknkttx.html