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

    千次阅读 2018-09-03 10:41:32
    JavaScript二位数组降维的几种方法 1循环遍历实现的降维 var arr = [['h','w','s','f'],['d','x'],['q','t','e']]; var result =[]; for (var i=0;i<arr.length;i++){ for(var j =0;j&...

    JavaScript二位数组降维的几种方法

    1循环遍历实现的降维

    		var arr = [['h','w','s','f'],['d','x'],['q','t','e']];
    		var result =[];
    		for (var i=0;i<arr.length;i++){
    			for(var j =0;j<arr[i].length;j++){
    				result.push(arr[i][j]);
    			}
    		}
    		console.log(result);
    		结果显示为
    		>>"h,w,s,f,d,x,q,t,e"
    

    2 concat实现多数组的连接
    concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

            var arr = [['h','w','s','f'],['d','x'],['q','t','e']];
    		var result =[];
    		for (var i=0;i<arr.length;i++){
    			result=result.concat(arr[i]);
    		}
    		console.log(result);
    
    展开全文
  • 业务开发中,二维数组、多维数组转为一维数组这种需求是少不了的,有些多维数组里面可能嵌套会更深,数组降维就是来解决此问题的 1、数组字符串化 let arr = [[222, 333, 444], [55, 66, 77], {a: 1} ] arr += ''; ...
  • 二维数组降维 二维数组只有两个维度,降维比较简单,也不用考虑太复杂的算法逻辑,我们看一下二维数组降维的几种方法; 遍历降维 var arr = [ ['h', 'e', 'l', 'l', 'o'], ['m', 'y'], ['w', 'o', 'r', 'l', 'd'...
  • 把多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,最近跟着黄轶老师学习Vue2.6.1.1版本源码时,看到源码对二维数组降维的代码,所以这里来写一篇,记录一下,加强印象 Vue源码学习 二维数组降为一维...
  • js代码-多维数组降维去重排序
  • function flatten(arr) { return [].concat(...arr.map(x => ... flatten(x) : x)) } 写一个通用函数,字段接收一个数组,这个数组可以是多维数组,函数返回的则是降维后的一维数组 降维普通数组: 降维数组对象:
    function flatten(arr) {
      return [].concat(...arr.map(x => Array.isArray(x) ? flatten(x) : x))
    }

    写一个通用函数,字段接收一个数组,这个数组可以是多维数组,函数返回的则是降维后的一维数组

    降维普通数组:

     

    降维数组对象:

     

     

     

     

    展开全文
  • 练习:写一个 function,传入两个或两个以上的数组,返回一个以...此二维数组的每个参数都是函数的实参,对其降维为一维数组,之后再使用ES6的Set对象去重。function unite(arr1, arr2, arr3){ return Array.from(ne...

    练习:写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。

    首先,fn参数个数未定,因此需使用函数参数的类数组对象arguments,然后将其转为数组。此二维数组的每个参数都是函数的实参,对其降维为一维数组,之后再使用ES6的Set对象去重。

    function unite(arr1, arr2, arr3){ return Array.from(new Set([].concat.apply([],[].slice.call(arguments,0)))); }


    展开全文
  • 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)));
    }
    
    展开全文
  • 方法一: 利用 es5 的 reduce 实现。 var arr1 = [[0, 1], [2, 3],...通过 Array.isArray 判断是否为多维数组,如果是,进行递归操作。 var arr1 = [[1,2],3,[[[4], 5]]]; function flatten(arr) { return [].co
  • 1、介绍数组扁平化(数组降维)的核心思想 2、使用6种方法实现数组扁平化 核心思想 效果 // 源数组:[1, [2, [3, [4, 5]]]] // 降维后数组:[1, 2, 3, 4, 5] 思路 对源数组的所有元素进行遍历, 判断遍历的元素...
  • Array.isArray(item))){ //concat会把值全部连接到[],在concat中的元素直接连接,一维数组会把数组中的值连接,多维数组中,数组中的数组会在下个循环继续降维,因此可以实现多重降维,最后得到一维数组。...
  • 很多时候,我们的数组层次并没有那么深,只有个二维数组,所以我们可以了解下一些快捷的使用方法。 reduce() 二维降一维 const oldArr = [ 1 , 2 , [ 3 , 4 ]]; const newArr = oldArr.reduce( ( prev, curr ) ...
  • js数组降维

    千次阅读 2018-11-08 15:27:17
    arr作为apply方法的第二个参数,本身是一个数组,数组中的每一个元素(还是数组,即二维数组的第二维)会被作为参数依次传入到concat中,效果等同于[ ].concat([1,2], [3,4], [5,6])。 利用apply方法,我们将单重...
  • 数组降维,很多都是二维数组转一维数组,但随着大数据时代的来临,很多都是多为数组,多为数组如何降维,下面将一一分析1.二位数组降维var arr=[1,2,[3,4,5]] Array.prototype.concat.apply([],arr)//[1,2,3,4,5]...
  • 把多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,最近跟着黄轶老师学习Vue2.6.1.1版本源码时,看到源码对二维数组降维的代码,所以这里来写一篇,记录一下,加强印象 二维数组降为一维数组 循环...
  • js最全的数组降维5种办法

    万次阅读 2019-05-11 16:50:36
    (1)数组字符串化 let arr = [[222, 333, 444], [55, 66, 77], {a: 1} ] arr += ''; arr = arr.split(','); console.log(arr); // ["222", "333", "444", "55", "66", "77", "[object Object]"] 所有的元素...
  • 二维数组降维 使用数组实例方法concat和ES6扩展运算符降维 let arr=[1,2,[3,4],5]; let arr1=[].concat(...arr); //先使用扩展运算符打散最外边的数组,concat自带打散粘合数组的功能 console.log(arr1); // [1, ...
  • 1.先降维 2.再查找 降维的方式: ①.concat+拓展运算符 let arr =[1,2,[3,4],5] let newArr = [].concat(...arr) ②Array.prototype.flat() let arr = [1,2,[3,4],5] console.log(arr.flat()) //[1,2,3,4,...
  • 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...
  • JavaScript数组降维 ...Q: [[1,2,3],[4,5,6]]这样的二维数组降维成一维数组 // 遍历数组 使用concat连接 function reduceDimension(arr) { let arr2 = []; arr.forEach((item) =&amp;gt; { ...
  • JS数组降维的几种方法

    多人点赞 热门讨论 2021-04-07 10:24:09
    二维数组降维 使用数组实例方法concat和ES6扩展运算符降维 let arr=[1,2,[3,4],5]; let arr1=[].concat(...arr); //先使用扩展运算符打散最外边的数组,concat自带打散粘合数组的功能 console.log(arr1); // [1, 2, ...
  • 数组的升维和降维

    2020-10-15 14:21:45
    数组降维和升维1.数组降维代码如下:2.数组的升维代码如下: 1.数组降维 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" ...
  • JS数组降维--Array.prototype.concat.apply([], arr)

    万次阅读 多人点赞 2020-04-25 10:57:53
    把多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,最近跟着黄轶老师学习Vue2.6.1.1版本源码时,看到源码对二维数组降维的代码,所以这里来写一篇,记录一下,加强印象 Vue源码...
  • 数组降维 第一种 // 第一种 let arr = [[222, 333, 444], [55, 66, 77], {a: 1} ] arr += ''; // 222,333,444,55,66,77,[object Object] // 进行分割并返回新的数组 arr = arr.split(','); // console.log(arr); // ...
  • 多维数组降维 flat()方法的作用和用法 一、作用 flat()方法用于将嵌套的数组“拉平”,变成一的数组。该方法返回一个新数组,对原数据没有影响。 、用法 示例:let arr = [1,2,3,[4,5,[6,7],8],9] arr.flat() ...
  • js数组降维浅解

    2020-05-20 09:02:30
    js数组降维浅解 简单的二维数组降为 arr=['a',['b'],['c'],['d'],'e','f']//二维数组 arr.flatMap(v=>v)//flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()) //["a", "b", "c", ...
  • 数组的降维与升维方法数组的降维数组的升维 ... // 二维数组降维 var arr = [ [12, 78, 56], [78, 89], [2, 3] ]; var arrNew = []; arr.forEach(item => { arrNew.push(...item); }) co
  • 微信小程序中需要用到数组的操作,介于本人js基础薄弱,故数组操作进行简单记录,以备后期方便学习: push和concat二者功能很相像,但有两点区别。 先看如下例子: var arr = []; arr.push(1); arr.push(2); arr....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 582
精华内容 232
关键字:

js二维数组降维