精华内容
下载资源
问答
  • JS 将多维数组转换为一维数组
    千次阅读
    2019-08-24 13:12:05

    取出嵌套数组的所有成员:

    function* iter(arr){
        if(Array.isArray(arr)){
            for(let i=0;i<arr.length;i++){
                yield* iter(arr[i]);
            }
        }
        else{
            yield arr;
        }
    }
    let arr=[1,2,[7,[4,[5,3]]]];
    for(let x of iter(arr)){
        console.log(x);
    }
    

    一、转字符串法

    let arr=[1,2,[7,[4,[5,3]]]];
    let result=arr.join(",").split(",");
    console.log(result);  //["1", "2", "7", "4", "5", "3"]
    

    二、toString()

    var a = [1,3,4,5,[6,7,9],[2],[5]];
    a = a.toString().split(",");
    console.log(a);  //["1", "3", "4", "5", "6", "7", "9", "2", "5"]
    

    三、递归

    使用Object.prototype.toString.call()来判断array的类型,也可以使用Array.isArray来判断。

    let result = [];
    function iter(arr){
        for(let item of arr){
            if(Object.prototype.toString.call(item).slice(8, -1)==='Array'){
                iter(item);
            }else{
                result.push(item);
            }
        }
        return result;
    }
    let arr4 = ['1',2,[3,4,[5,6]],7];
    console.log(iter(arr4)); // ["1", 2, 3, 4, 5, 6, 7]
    

    【补充】为什么用Object.prototype.toString.call(obj)检测对象类型?

    问题1:使用typeof bar === "object"检测”bar”是否为对象有什么缺点?如何避免?

    • 用 typeof 不能准确判断一个对象变量,null 的结果也是 object,数组的结果也是 object,有时我们需要的是 “纯粹” 的 object 对象。如何避免呢?比较好的方式是:
    console.log(Object.prototype.toString.call(obj) === "[object Object]");
    

    问题2:为什么不直接用obj.toString()?

    • toString为Object的原型方法,而Array 、Function等类型作为Object的实例,都重写了toString。
    • 不同的对象类型调用toString方法时,根据原型链知识,调用的是对应的重写之后的toString方法(Function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串),而不会去调用Object上原型toString方法(返回对象的具体类型)。
    • 采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。
    console.log("jerry".toString());//jerry
    console.log((1).toString());//1
    console.log([1,2].toString());//1,2
    console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
    console.log(function(){}.toString());//function (){}
    console.log(null.toString());//error
    console.log(undefined.toString());//error
    

    使用Object.prototype.toString.call():

    console.log(Object.prototype.toString.call("jerry"));//[object String]
    console.log(Object.prototype.toString.call(12));//[object Number]
    console.log(Object.prototype.toString.call(true));//[object Boolean]
    console.log(Object.prototype.toString.call(undefined));//[object Undefined]
    console.log(Object.prototype.toString.call(null));//[object Null]
    console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
    console.log(Object.prototype.toString.call(function(){}));//[object Function]
    console.log(Object.prototype.toString.call([]));//[object Array]
    console.log(Object.prototype.toString.call(new Date));//[object Date]
    console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
    function Person(){};
    console.log(Object.prototype.toString.call(new Person));//[object Object]
    

    四、concat()

    只能将二维数组转为一维数组

    let arr3 = [1,5,[6,[7,8]],[2],[5]];
    console.log([].concat.apply([],arr3)); //[1, 5, 6, Array(2), 2, 5]
    
    更多相关内容
  • 多维数组 aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1, 3, 5, 6, 7]] 转换为一维数组 a = [1, 1, 2, 4, 2, 3...将多维数组转换为一维数组 --递归方法 let aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1...

    将多维数组

    aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1, 3, 5, 6, 7]]
    

    转换为一维数组

    a = [1, 1, 2, 4, 2, 3, 4, 8, 9, 4, 1, 3, 5, 6, 7]
    

    将多维数组转换为一维数组 --递归方法

    let aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1, 3, 5, 6, 7]]
    let a = [];		//存放结果
    function removeArray(arr){
    		for(let i = 0; i< arr.length;i++){
    			if (Array.isArray(arr[i])) {	//判断是否是数组
    				removeArray(arr[i])
    			} else{
    				a.push(arr[i])
    			}
    		}
    	}
    removeArray(aarr);
    console.log(a);	//[1, 1, 2, 4, 2, 3, 4, 8, 9, 4, 1, 3, 5, 6, 7]
    

    将多维数组转换为一维数组 并去重

    let aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1, 3, 5, 6, 7]]
    let a = [];	//结果
    	
    /*将多维数组转换为一维数组  并去重--递归方法*/
    function removeArray(arr){
    	for(let i = 0; i< arr.length;i++){
    		if (Array.isArray(arr[i])) {	//判断是否是数组
    			removeArray(arr[i])
    		} else{
    			if(a.indexOf(arr[i]) == -1){	//判断对数组进行去重
    				a.push(arr[i])
    			}
    		}
    	}
    }
    removeArray(aarr);
    console.log(a);	// [1, 2, 4, 3, 8, 9, 5, 6, 7]
    

    判断是否是数组的方式
    方法1:	Array.isArray(arr)
    方法2:	arr instanceof Array
    // instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
    方法3:	arr.length > 0
    

    不可使用 typeof ,因为返回的是object

    var aa= [1,2]
    console.log(typeof aa  )		//object
    

    方法2

    先转换成字符串分割成数组,然后在遍历去除重复数据。

    aarr=[ 1,[ 1, 2], 4, [ 2,[ 3, 4, 8, 9], 4], [ 1, 3, 5, 6, 7]]
    let result = []
    aarr.toString().split(',').map(item => {
    	if (result.indexOf(Number(item)) == -1) {
    		result.push(Number(item))
    	}
    })
    console.log(result)	// [ 1, 2, 4, 3, 8, 9, 5, 6, 7 ]
    
    展开全文
  • 2.Array的原型对象(prototype)上面有flat方法,里面可以放一个实参Infinity深度,它可以把任意的深度(嵌套3层甚至更多层)的数组,转化为一维数组 3.展开运算符用...来展开数组里面的元素,把它们变成一个个独立的...

    1.字符串的join方法,再用数组的split方法来转为数组

    转化结果 正确和错误实例对比

    注意:join(',')方法要以逗号分割,split(',')方法也要以逗号分割

     2.Array的原型对象(prototype)上面有flat方法,里面可以放一个实参Infinity深度,它可以把任意的深度(嵌套3层甚至更多层)的数组,转化为一维数组

     3.展开运算符用...来展开数组里面的元素,把它们变成一个个独立的元素,再用空数组的concat方法来合并之前展开的元素和空数组

     concat后面的数组会替换前面的空数组

    例子

    结果 

     

     

    展开全文
  • 将[1,2,[3,4,[5,6],7],8]成怎[1,2,3,4,5,6,7,8] 1、最简单方法 [1,2,[3,4,[5,6],7],8].toString().split(',') // ->["1", "2", "3", "4", "5", "6", "7", "8"] 2、reduce递归 function toArray(a){...

    将[1,2,[3,4,[5,6],7],8]转成怎[1,2,3,4,5,6,7,8]
     

    1、最简单方法

    [1,2,[3,4,[5,6],7],8].toString().split(',')
    
    // ->["1", "2", "3", "4", "5", "6", "7", "8"]

    2、reduce递归

    function toArray(a){
        return a.reduce((res,current)=>{
            return Array.isArray(current)?[...res,...toArray(current)]:[...res,current]
        },[])
    }
    toArray([1,2,[3,4,[5,6],7],8])
    
    // -->[1, 2, 3, 4, 5, 6, 7, 8]

    3 、字符串

    JSON.stringify([1,2,[3,4,[5,6],7],8]).replace(/\[|\]/g,'').split(',')
    
    // -->[1, 2, 3, 4, 5, 6, 7, 8]

     

    转载于:https://my.oschina.net/daoxiaozhang/blog/1821093

    展开全文
  • 因为数组调用时同样有数组降价的问题,实际函数得到是一个指针,指向行向量构成的一维数组,这样每个一维数组的大小(size)必须提前定义好,便于编译器分配栈空间。 int sum(int iArray[][4], int size); int ...
  • javascript原型多维数组遍历

    千次阅读 2015-09-26 12:39:05
    原型对象实际就是个构造函数的实例对象,与普通的实例对象没有什么本质的区别,js中每个对象都有原型对象。不过他比较特殊,该对象所包含的所有属性和方法能够供构造函数的所有实例共享,这就是其他语言所...
  • 数组原型有flat()方法,里面的参数如果是Infinity就将多维数组转为一维。如果不写参数,就默认减少一层[],可以将参数写成数字,意味着减少多少层[],建议自己控制台实操体验一下。 2.自定义函数 function ...
  • 前言:笔者本来是打算在上篇文章中,把多维数组和多维指针与数组的访问方式结合起来一起...但是写作过程中,发现创作篇幅明显过长,不利于日后按图索骥,所以又重开了篇,介绍多维数组和多维指针的关联。 ...
  • 1、数组方法pop() push() unshift() shift()push 后面添加元素,个数不限,返回新数组的长度pop 从后面删除个元素,返回那个元素unshift 从前面添加元素,个数不限,返回新数组的长度shift 从前面删除个元素,...
  • 初级 : 将二维数组 变成 一维数组 方式一 : 使用 js api (function(){ let origin = [1,2,[3,4],5]; let convert = origin.flat(); console.log(convert); // display [1,2,3,4,5] })(); ...
  • 因此程序中如何处理堆数据,并且这堆数据都还有着一些相同时,就是非常重要的了。最佳的解决方式就是使用集合了”01—集合的定义计算机科学中,集合是组可变数量的数据项(也可能是 0 个)的组合,这些数据项...
  • 数组不是指针,数组名的值是个指针常量。 依据《c和指针》《c专家编程》的例子,来总结一下。 int array[10]; int *ap =array + 2;...多维数组(从二维数组说起) *(*(p+i)+j)//是p[i][...
  • qsort使用 首先包含头文件:#include <stdlib.h> 其次需要cmp比较函数:(自己编) ...接着主函数中使用qsort(nums,numsSize,sizeof(int),cmp); 进行升序排序操作。 参考文献: C 库函
  • C语言多维数组

    2022-04-26 21:42:27
    如果某个数组的数超过1,它就被称为多维数组,例如,下面这个声明: int matrix[6][10] 创建了个包含60个元素的矩阵。但是,它是6行每行10个元素,还是10行每行6个元素? 为了回答这个问题 ...
  • 多维数组名作函数参数 1.写函数,求3×4矩阵中所有元素中的最大值 #include <stdio.h> int max_value(int array[][4]); int main() { int a[3][4] = { {11,32,45,67},{22,44,66,88},{15,72,43,37} }; ...
  • 思想是在数组原型上添加个方法。 1 // js中的数组forEach方法,传入回掉函数 能够帮助我们遍历数组 2 var arr =[1,2,3,4,[1,2,[1,4]]]; 3 arr.forEach( 4 function(item , index , ...
  • 现有数组$tree = array (array ('ID' => 1,'PARENT' => 0,'NAME' => '祖父','CHILD' => array (array ('ID' => 3,'PARENT' => 1,'NAME' => '叔伯' ),array ('ID' => 4,'PARENT' => 1,'...
  • 1. 一维数组 2.1 直接使用数组 函数中,使用数组的很简单。 例如我们想计算某个班级中一个组的8名学生某次考试时的语文成绩的平均值和总分。 直接代码 #include <iostream> using namespace std //首先,...
  • 众所周知,函数参数中一维数组的长度会被忽略的,但二维数组的第二维度就会被要求指定长度(否则gcc会报告“数组元素的类型不完全”)。这很好理解,它是为了让函数知道矩阵的宽度。同理,三维数组就会被要求指定第...
  • 文章目录写前面、数据分析与Numpy二、多维数组三、Numpy的数据类型 写前面 代码中的np表示的是numpy,因为导入的时候是:import numpy as np 、数据分析与Numpy 1、数据分析 MATLAB:专业化数据分析工具 ...
  • 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收。类似的方式,可以使用多维数组形式...
  • 多维数组、数组的排序

    千次阅读 2012-04-18 17:21:18
    多维数组可以理解为由若干低维数组组成的数组,例如,多个一维数组可以组合而成为“二维数组”,多个二维数组组成三维数组… 二维数组的结构: s[i][j] j=0 j=1 j=2 i=0 67 89 53 i=1 77 98 68 i=2 57 66 73 i...
  • 数据分析数据分析1、numpy:多维数组的创建1.1 随机抽样创建1.1.1 rand1.1.2 uniform1.1.3 randint1.2 序列创建1.2.1 array1.2.2 zeros1.2.3 ones1.2.4 arange1.3 数组重新排列1.4 数据类型的转换2、numpy的矩阵计算...
  • .先从用malloc()函数申请多维动态函数说起。 C语言中用普通的方式定义的...因为我们知道普通的数组名其实就是数组的起始地址,相当于个指针常量。 1.定义个大小为n的整型动态数组,如下: int *a; int n;
  • 之前就知道数组名和指针不同,因为运算符sizeof对数组名和指向数组的指针的运算结果是不同的–sizeof数组名得到的是数组空间的大小,而sizeof指向数组的指针获得的是指针自身占据空间大小。而如果是对指针进行间接...
  • 函数与多维数组

    2020-09-24 09:23:45
    函数的形参为一维数组时 int sum(int * n); //函数原型 int sum(int * n){...} //函数定义 那么如何编写处理二维数组的函数? 假设数组 junk是一个内含 3个数组元素的数组,每个元素是内含4个int类型值的数组(即...
  • 关于数组我们就可以把它看作是个类型的所有数据的个集合,并用数组下标来区分或指定每个数。例如个班级通常会有几十个人,但是老师来认识他们的时候首先会把他们看作是某某班的成员,然后再利用他们的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,137
精华内容 1,654
关键字:

在原型上多维数组转一维数组