数组怎么转对象,对象怎么转数组

目录

一、数组怎么转对象

二、对象转数组

三、相互转换封装成函数


一、数组怎么转对象

1、需求

let arr = [{label: '男', value: 0},{label: '女', value: 1}]
// 转换为 
let obj = {0:'男', 1:'女'}

2、实现

思路一:

  1. 使用数组的forEach方法遍历数组
  2. 定义一个空对象
  3. 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
  4. 循环结束后将obj的值返回给调用者即可
let arr = [{label: '男', value: 0},{label: '女', value: 1}]

function arrToObj(arr){
    let obj = {}
    arr.forEach(item => {
        obj[item.value] = item.label
    })
    return obj
}

const obj1 = arrToObj(arr)
console.log('数组forEach方法', obj1)

思路二:

  1. 使用数组的forEach方法遍历数组
  2. 定义一个空对象
  3. 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
  4. 循环结束后将obj的值返回给调用者即可
let arr = [{label: '男', value: 0},{label: '女', value: 1}]

function arrToObj1(arr){
   return arr.reduce((obj,item) => {
        obj[item.value] = item.label
    	return obj
    },{})
}

const obj2 = arrToObj1(arr)
console.log('数组reduce方法', obj2)

二、对象转数组

1. 需求

let obj = { 0: '男', 1: '女' }
// 转换为
let arr = [{label: '男', value: 0},{label: '女', value: 1}]

2. 实现

let obj = { 0: '男', 1: '女' }

// 使用for...in...循环,拿到对象的键、值
// 将其组成新对象,使用数组的push方法追加到数组中
function objToArr(obj){
    let arr = []
    for(let key in obj){
        arr.push({
            label: obj[key],
            value: key
        })
    }
    return arr
}

const arr = objToArr(obj)
console.log(arr)

三、相互转换封装成函数

// 数组转对象、对象转数组
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"]

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕穗子博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值