目录
一、数组怎么转对象
1、需求
let arr = [{label: '男', value: 0},{label: '女', value: 1}]
// 转换为
let obj = {0:'男', 1:'女'}
2、实现
思路一:
- 使用数组的forEach方法遍历数组
- 定义一个空对象
- 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
- 循环结束后将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)
思路二:
- 使用数组的forEach方法遍历数组
- 定义一个空对象
- 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
- 循环结束后将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"]