1. JS 数组转对象 对象转数组  对象数组互相转换  数组对象互相转换
  2. 声明一个函数,arr_obj ,里面接收一个参数,参数类型只接受对象或者数组

  3. 如果没有传递任何参数  或者 传递的参数类型不符合要求,就会抛出错误异常

  4. 无论是没有传递任何参数 或者 传递的参数类型不符合要求,抛出异常 并 打印出传递的参数

  5. 如果要查看当前函数的对象,请通过 new 的方式实例化函数 arr_obj ,自行在控制台打印输出

  6. 调用此函数,传入数组会自动转换为对象;传入对象会自动转换为数组

  7. 针对嵌套深层次比较深的对象或者数组

    // 数组转对象、对象转数组
    function arr_obj(query) {
    // 如果未传递参数,就赋值为 undefined
    this.query = query || undefined;
    this.params = this.query; // 默认对象
    var defaultObj = {};
    // 默认数组
    var defaultArr = [];
    // 数组转对象
    this.arrToObj = function(arr) {
    var obj = {}
    for (var i = 0; i < arr.length; i++) {
    // 数组转为对象,对象的键=数组值, 对象的值=数组值
    obj[arr[i]] = arr[i];
    // 如果是数组,就再次调用自身 (this.arrToObj),递归接着循环
    if (Object.prototype.toString.call(arr[i]) == "[object Array]") {
    var deepArray = this.arrToObj(arr[i])
    continue;
    } else {
    defaultObj[arr[i]] = arr[i]
    }
    }
    this.params = defaultObj;
    }; // 对象转数组
    this.objToArr = function(obj) {
    var arr = [];
    for (var i in obj) {
    arr.push(obj[i]);
    // 如果是对象,就再次调用自身 (this.ObjToObj),递归接着循环
    if(Object.prototype.toString.call(obj[i]) == "[object Object]"){
    var deepObject=this.objToArr(obj[i]);
    continue;
    }else{
    defaultArr.push(obj[i])
    }
    }
    this.params = defaultArr;
    }; if (Object.prototype.toString.call(this.query) == "[object Array]") {
    this.arrToObj(this.query);
    } else if (Object.prototype.toString.call(this.query) == "[object Object]") {
    this.objToArr(this.query);
    } else if (Object.prototype.toString.call(this.query) == "[object Undefined]") {
    console.error("没有获取到传递进来的参数", this.params);
    throw "没有获取到传递进来的参数"
    } else {
    console.error("错误的参数:", this.params,
    "错误的参数类型:", Object.prototype.toString.call(this.params));
    throw "传递的参数只能是对象或者数组类型"
    }
    return this.params;
    }
    // 调用 对象转数组
    var obj = {
    a1:"a",
    b1:{
    c1:"c",d1:"d"
    ,q1:{
    q:"q",w:"w",
    },
    },
    e1:"e",
    f1:"f"
    };
    // // 调用 数组转对象
    var arr = ["a", ["c",["e"],"q"],"t"];
    var asd1 = new arr_obj(arr);
    console.log(asd1);
    // 输出 {a: "a", c: "c", e: "e", q: "q", t: "t"}
    // 调用 对象转数组
    var asd2=new arr_obj(obj);
    console.log(asd2);
    // 输出 ["a", "c", "d", "q", "w", "e", "f"]

    可访问此处进入原文 https://mp.weixin.qq.com/s/Ged8ZbUGy14qwPf7pcjCLQ

JS 数组转对象 对象转数组 对象数组互相转换 数组对象互相转换的更多相关文章

  1. js常用数据类型(Number,String,undefined,boolean) 引用类型( function,object,null ),其他数据类型( 数组Array,时间Date,正则RegExp ),数组与对象的使用

    js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型  Number var a1 = 10; var a2 = 3.66; conso ...

  2. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型, ...

  3. js总结(一):javascript的类型:基本类型、对象和数组

    javascript 类型分为2种,一个是原始值,另一个是复杂值(对象). 一.原始值 5个原始值是:数字,字符,布尔,null,undefined. 9个原生的对象构造函数:Number Strin ...

  4. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比(转载)

    在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型,Array ...

  5. Js将字符串转换成对象或数组en

    举个例子 var test='{ colkey: "col", colsinfo: "NameList" }' a.将文本转换成对象 var test='{ c ...

  6. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. JavaScript怎么把对象里的数据整合进另外一个数组里

    https://blog.csdn.net/qq_26222859/article/details/70331833 var json1 = [ {"guoshui":[ 3000 ...

  8. JavaScript中对象数组 根据某个属性值 然后push到新的数组

    原文链接 https://segmentfault.com/q/1010000010075035 将下列对象数组中,工资大于1w的员工,增加到对象数组 WanSalary中 var BaiduUser ...

  9. 组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双向绑定数据

    组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双 ...

  10. 组装数据- 对象里面是key:value, value里面是数组的形式,如 {key:[aa,bb], key:[cc,dd]}

    组合后 对象里面是key:value,value里面是数组的形式{key:[aa,bb], key:[cc,dd]} var chinaGeoCoordMap = { '无锡市': [121.4648 ...

随机推荐

  1. 白鲸调度系统助力国内头部券商打造国产信创化 DataOps 平台

    导读 国内某头部券商是国内排名前三的全国性大型综合证券公司.作为证券行业领头羊之一,该券商一直高度重视核心系统的自主可控以及网络信息安全.早些时候,其已经完成了信创化数据库改造和OA系统适配,接下来的 ...

  2. CSV文件导出详细讲解

    一.准备jar  如下所以放入maven配置文件中 二.controller层 三.SERVICE层 四.CsvUtil文件 /** * csv文件导入导出 */public class CsvUti ...

  3. 信创环境:鲲鹏ARM+麒麟V10离线部署K8s和Rainbond信创平台

    在上篇<国产化信创开源云原生平台>文章中,我们介绍了 Rainbond 作为可能是国内首个开源国产化信创平台,在支持国产化和信创方面的能力,并简要介绍了如何在国产化信创环境中在线部署 Ku ...

  4. mysql 和 sqlalchemy 的一个测试环境

    Mysql: docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqldocker exec ...

  5. 录音转文字SDK哪家强?

    最近在做一款录音App,有一个模块是录音转文字功能,于是对比了市面上常见的API,国内做的比较大的主要有讯飞.腾讯.阿里.百度.华为. 讯飞 讯飞在国内做语音SDK是做的比较早的,翻译出来的准确率挺不 ...

  6. PDF解析,还能做得更好

    随着大模型文档智能应用逐渐步入正轨,文档解析类产品成为其中重要的一环.文档解析工具能够"唤醒"沉睡在PDF文件中的知识,将其转化为机器能够识别.读取的信息,将可用数据从txt.cs ...

  7. DNN、CNN、RNN的区别

    参考1:CNN.RNN.DNN区别 参考2:一文读懂 CNN.DNN.RNN 内部网络结构区别 一张图解释所有: 感知机(输入层.输出层.一个隐藏层)-->不能解决复杂的函数-->神经网络 ...

  8. 深入C++引用及其注意事项、对引用取地址时的内存模型、const数组等

    const int f[10] = { 1,2,3,4,5,6,7,8,9,10 }; int main() { // test1 const int i = 3; int& j = cons ...

  9. Vue3——集成mock 模拟数据生成器

    安装依赖 npm install -D mockjs vite-plugin-mock@2.9.6 在 vite.config.js 文件中引入并配置 vite-plugin-mock 插件 impo ...

  10. IDEA如何自动导入依赖的jar包

    前言 我们在使用IDEA开发时,会引入第三方的jar包,这些第三方的jar包使我们可以快速的使用别人开发好的功能,而不用重复造轮子了. 这大大提高了我们的开发效率. 但是,有时候我们一下子需要导入太多 ...