精华内容
下载资源
问答
  • 数组降维

    2019-11-21 13:46:46
    数组降维 Array.prototype.reduce const oldArr = [1, 2, [3, 4]]; const newArr = oldArr.reduce((prev, curr) => (prev.concat(curr)), []); Array.prototype.concat const oldArr = [1, 2, [3, 4]]; ...

    数组降维

    • Array.prototype.reduce
    const oldArr = [1, 2, [3, 4]];
    const newArr = oldArr.reduce((prev, curr) => (prev.concat(curr)), []);
    
    • Array.prototype.concat
    const oldArr = [1, 2, [3, 4]];
    const newArr = [].concat(...oldArr);
    const newnewArr = Array.prototype.concat.apply([], oldArr);
    
    • Array.prototype.forEach
    const oldArr = [ 1,[ 2, [3], [4, 5, 6], 10,], 12];
    const newArr = [];
    const ergodic = (arr) => {
      arr.forEach((item) => {
        if (Array.isArray(item)) {
          ergodic(item);
        } else {
          newArr.push(item);
        }
      })
    }
    ergodic(oldArr, newArr);
    
    • Array.protorype.flat
    const oldArr = [1, 2, [3, 4]];
    const newArr = oldArr.flat(Infinity);
    
    • Array.prototype.join && String.prototype.split
    [1, 2, [3, 4, [5, 6, [7, 8]]]].join(',').split(',')
    
    展开全文
  • js代码-js 中的数组降维
  • js代码-多维数组降维去重排序
  • 二维数组降维 二维数组只有两个维度,降维比较简单,也不用考虑太复杂的算法逻辑,我们看一下二维数组降维的几种方法; 遍历降维 var arr = [ ['h', 'e', 'l', 'l', 'o'], ['m', 'y'], ['w', 'o', 'r', 'l', 'd'...
  • Javascript数组降维

    2020-07-31 15:01:27
    Javascript实现的数组降维 JS 中数组默认是一维的(数组的每一个元素是简单类型,不是引用类型)。如果数组的某一项还是数组,那么我们认为数组是二维或者高维的,在算法题目中经常遇到这种情况。 数组的元素可能是...

    Javascript实现的数组降维

    JS 中数组默认是一维的(数组的每一个元素是简单类型,不是引用类型)。如果数组的某一项还是数组,那么我们认为数组是二维或者高维的,在算法题目中经常遇到这种情况。

    数组的元素可能是数组,这样一层层嵌套,可能得到一个嵌套很深的数组,数组降维要做的事就是把嵌套很深的数组展开,一般最后得到一个一维数组,其中的元素都是非数组元素,比如数组[1, [2, 3, [4, 5], 6], 7, 8]降维展开后是[1, 2, 3, 4, 5, 6, 7, 8].

    备注:ES6中,提供了 Array.flat API 直接将高维数组转换成一位数组,不需要使用下面的方法。现在我主要使用这种方法实现数组降维。

    1.普通方法

    function flattenMd(arr){
      var result=[]
      function flatten(arr){
        for (var i = 0; i < arr.length; i++) {
          if (Array.isArray(arr[i])) {
            flatten(arr[i]);
          }else{
            result.push(arr[i]);
          }        
        }
      }
      flatten(arr);
      return result;
    }
    var arr=[1, [2, 3, [4, 5], 6], 7, 8]
    console.log(flattenMd(arr));[ 1, 2, 3, 4, 5, 6, 7, 8 ]
    

    **备注:**这里我使用了Array.isArray()方法来检测对象时候是数组。当然了如果支持ES5的话,还可以直接使用数组的迭代方法forEach(或map、reduce等),Es6中还有for···in可以使用,这里就不赘述了。
    这个方法需要定义两个函数,其中flatten方法位于内部。还可以改造成闭包的形式

    function flattenMd(ret) {
      function flatten(arr) {
        arr.forEach(function(item) {
          (Array.isArray(item)) ? flatten(item) : ret.push(item);
        });
      }
    
      return function(arr) {
        flatten(arr);
        return ret;
      }
    
    }([]);
    var arr=[1, [2, 3, [4, 5], 6], 7, 8]
    console.log(flattenMd(arr));[ 1, 2, 3, 4, 5, 6, 7, 8 ]
    

    2.数组concat方法

    熟悉数组操作方法的开发人员应该知道数组concat方法的特性:传递给concat方法的参数序列中如果包含数组,则会将这个数组的每一项添加到结果数组中,这就使数组的这个方法具有了天然的展开二维数组的能力,比如:

    var colors=['red','green','blue'];
    var colors2=colors.concat('yellow',['black','brown']);
    console.log(colors2)//[ 'red', 'green', 'blue', 'yellow', 'black', 'brown' ]
    

    **需要注意的是如果数组的元素还是数组则不会再展开了,也就是concat方法只能降低一维。**借助concat方法,可以得到另一种二维数组降维方法。

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

    上面的方法还可以进一步简化。我们知道apply方法是可以直接接受数组参数,这样我们连循环迭代都省了。

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

    网上很多博客说使用递归很容易将二维的降维改造成多维的降维,实际上操作起来是比较复杂的,因为没有现成的方法能够判断某个数组是不是二维数组,也就不能判断递归的结束条件了。所以对于多维数组的降维需要重新规划使用concat方法可以避免方法一中多出的内部函数
    对于多维数组

    function flattenMd(arr) {
      var result = [];
      for(var i = 0; i < arr.length; i++){
        if(arr[i] instanceof Array) {
          result = result.concat(flattenMd(arr[i]));
        }
        else {
          result.push(arr[i]);
        }
      }
      return result;
    }
    var arr=[1, [2, 3, [4, 5], 6], 7, 8]
    console.log(flattenMd(arr));[ 1, 2, 3, 4, 5, 6, 7, 8 ]
    

    3.数组join和split方法的结合(有问题)

    很多开发人员都知道数组的join方法可以将数组展开成字符串,但是不确定的是join方法能够展平数组,即使是多维数组,我们再使用split方法重新组合数组就行了。但是这个方法有天然缺陷,下面的例子中会看到

    function flattenMd(arr) {
       return arr.join().split(',');   
    }
    var arr=['1', [null, 3, [4, 5], {K:1}], undefined, 8]
    
    console.log(flattenMd(arr));//[ '1', '', '3', '4', '5', '[object Object]', '', '8' ]
    

    从结果可以看出,这样处理过后有几个缺点:一是所有类型的元素都会变成字符串;二是null、undefined会变成空字符串、对象会变成’[object Object]’。相当于调用了toString方法,当也不是说这个方法一无是处。对于同一种类型的元素,还是很有用处的,比如要求多维数组的最大值。

    function flattenMd(arr) {
       return arr.join().split(',');   
    }
    var arr=[1, [5, 3, [8, 5], 5,[15]], 9, 13]
    console.log(Math.max.apply(null,flattenMd(arr)));//15
    

    4.实际使用

    function flatten(arr) {
      return arr.reduce((prev, cur) => {
        return plane.concat(Array.isArray(cur) ? flatten(cur) : cur);
      }, []);
    }
    
    function deepFlatten(arr) {
      flatten = arr => [].concat(...arr);
      return flatten(arr.map(item => (Array.isArray(item) ? deepFlatten(item) : item)));
    }
    
    展开全文
  • JS数组降维–Array.prototype.concat.apply二维数组降为一维数组循环降维concat降维apply和concat降维Vue2.6.11版本源码降维多维数组降为一维数组递归降维 把多维数组(尤其是二维数组)转化为一维数组是业务开发中...
  • tree数组降维

    2021-07-29 15:12:43
    需求: 给定一个数组,将children数组降维添加到数组中,生成一个新的一维数组 const arr = [ { id: 1, name: 'zs', age: 18 }, { id: 2, name: 'lisi', age: 19, children: [ { id: 3, name: 'wangwu'...

    需求: 给定一个数组,将children数组降维添加到数组中,生成一个新的一维数组

    const arr = [
      {
        id: 1,
        name: 'zs',
        age: 18
      },
      {
        id: 2,
        name: 'lisi',
        age: 19,
        children: [
          {
            id: 3,
            name: 'wangwu',
            age: 20
          },
          {
            id: 4,
            name: 'zhaoliu',
            age: 21,
            children: [
              {
                id: 5,
                name: 'tianqi',
                age: 22
              }
            ]
          }
        ]
      },
      {
        id: 6,
        name: 'wb',
        age: 23
      }
    ]
    

    代码实现

    const deepTree = (arr, tempArr) => {
      const result = tempArr || []
    
      arr.forEach(item => {
        if (item.children) {
          const { children, ...obj } = item
          result.push(obj)
          deepTree(children, result)
          return
        }
        result.push(item)
      })
    
      return result
    }
    

    ts实现

    展开全文
  • 2.2 数组降维 p45

    2016-07-06 22:05:04
    数组降维的简单方法
    <!doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>拆分字符串,存入数组</title>
        <style>
            *{padding:0;margin:0;}
        </style>
    </head>
    <body>
    <script type="text/javascript">
        var fruitarray = [];
        fruitarray[0] = ['strawberry','orange'];
        fruitarray[1] = ['lime','peach','banana'];
        fruitarray[2] = ['tangerine','apricot'];
        fruitarray[3] = ['raspberry','kiwi'];
    //方法一,concat()直接连接
        var total=fruitarray[0].concat(fruitarray[1],fruitarray[2],fruitarray[3])
        alert(total[5]);
    //方法二,利用concat.apply([],array)直接传入数组
    var a=[];
    var total=a.concat.apply([],fruitarray);
    //此处a还可以直接用Array.prototype代替
    </script></body></html>

    展开全文
  • 数组降维和数组去重

    2019-09-17 19:08:10
    二维数组降维 function reduceDimension(arr) { return Array.prototype.concat.apply([], arr); } 多维数组降维 function reduceDimension(arr) { let tmp = arr; let result = arr; while(tmp instanceof Arr...
  • 【多维数组降维

    2019-11-28 16:15:52
    多维数组降维 //数组降维 面试出现频率 80% var arr = [1,2,3,4,5,6,7,7,[1,1,3,4,5,6,7,[1,1,2,3,4,5]]]; function fun(arr){ // 两次打散数组 但只是 一次降维 arr = [].concat.apply([],arr); // ES6 --> ...
  • JS数组降维--Array.prototype.concat.apply([], arr)

    万次阅读 多人点赞 2020-04-25 10:57:53
    JS数组降维--Array.prototype.concat.apply二维数组降为一维数组循环降维concat降维apply和concat降维Vue2.6.11版本源码降维多维数组降为一维数组递归降维 把多维数组(尤其是二维数组)转化为一维数组是业务开发中...
  • 多维数组降维

    2019-05-15 15:34:27
    多维数组降维(第一种) var arr = [1,[2,3,4],5]; function flatten(arr) { return arr.reduce((result, item)=> { console.log({result, item}); return result.concat(Array.isArray(item) ? flatten...
  • 数组降维

    2021-06-07 14:11:15
    数组降维化 数据; x_valuse = [-1,-1,0,2,0] y_valuse = [2,0,0,1,1] #原始矩阵 array_origin = np.array([x_valuse,y_valuse]) 一般的降为化步骤; 1.去除平均值 #去除平均值 x = x_valuse - np.mean(x_valuse)...
  • Js数组降维

    2021-03-27 14:00:36
    Js数组降维的两种常用方法: 1.使用函数的flat()方法; 2.使用递归降维; 下面分别介绍两种方法: 1.flat()方法: //falt(num) num => 降几个维度,不写默认为一维 当num为Infinity,意味着将数组变成一维数组...
  • 用filter等方法进行数组降维昨天说了reduce数组降维,今天突然想到,为什么不能用其他api来降维,应该也是可以,就试了下,果然可以,但还是遇到了些小问题 直接上代码了let array = [2, 3, 5, [8,[ 4, 6, 9]]]; ...
  • 网上的数组降维方法有很多,大多写的又长又难懂,这里总结了三种优雅高效的方法,如果有更好的方法,欢迎评论区留言,大家一起探讨进步 <script> const arr = [1,[2,3,[4,5,"今晚",[6,'吃','什','么']]],{...
  • 如何优雅的给多维数组降维

    千次阅读 2018-10-18 06:43:28
    在项目开发过程中经常会碰到需要给多维数组降维的需求,而现在网上存在的解决方案中大多都使用递归的方式,性能上消耗较大,且代码冗余,不直观,而且大多都只能进行二维降解,例如flatMap等,而且还存在兼容问题。...
  • tree数组降维(ts)

    2021-07-29 16:23:26
    需求: 给定一个数组,将children数组降维添加到数组中,生成一个新的一维数组 interface Item { id: number, name: string, age: number, children?: any } type Items = Array<Item> const arr: Items...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,693
精华内容 5,077
关键字:

数组降维