在做这个之前,我们先来回忆一下一个知识点 :
如何给一个对象添加新属性????

  1. // 假如我要给obj添加新属性,可以这样来写
  2. // 用[] 就是动态添加
  3. const obj = []
  4. obj['age'] = 18
  5. console.log(obj)
  6. // 输出的结果是 {age:18}

需求一.数组转对象

const arr = [ {label: ‘小华’, value: 0}, {label: ‘小美’, value: 1} ]

转换成

{0: ‘小华’, 1:’小美’}


方法1: for循环

  1. const arr = [
  2. { label: '小华', value: 1 },
  3. { label: '小美', value: 0 },
  4. ]
  5. const list = {}
  6. for (i = 0; i < arr.length; i++) {
  7. list[arr[i].value] = arr[i].label
  8. }
  9. console.log(list)

输出结果: image.png

方法2: reduce方法

乞丐版:

  1. const arr = [
  2. { label: '小华', value: 1 },
  3. { label: '小美', value: 0 },
  4. ]
  5. let list = arr.reduce((acc, obj) => {
  6. acc[obj.value] = obj.label
  7. return acc // 这里一定要写返回值
  8. }, {}) // 注意这里有一个初始值,定义的是空{}
  9. console.log(list)

精简版:

image.png

看不懂版:

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624096921080-d939280d-b0fc-470b-82e0-55f3556be103.png#clientId=u331a1df0-b848-4&from=paste&height=48&id=uddba4cf9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=48&originWidth=674&originalType=binary&ratio=1&size=5275&status=done&style=none&taskId=uc9defce3-0530-4d3c-83c5-9a67485e831&width=674)

说明:

  1. reduce里面一共有四个参数,acc代表累加器,有一个初始值,item代表的每一项<br /> acc[obj.value]意思就是说,看一看acc里面有没有[key]这个属性,如果没有的话,就加进去,在第一次的时候,list是一个空的对象,然后经过reduce,给这个list添加新的属性,这个时候,这个list就变成了{0,'小美'},<br />然后又经过一次acc累加,看看acc里面有没有''小华''这个对象,发现没有,就累加进去了,然后这个时候这个list就变成了{ 0 :'小美', 1 :'小华'}

输出结果: image.png


需求二 .对象转数组

{0: ‘小华’, 1:’小美’}

转换成

const arr = [ {label: ‘小华’, value: 0}, {label: ‘小美’, value: 1} ]

方法1: for循环

  1. const obj = { 0: '男', 1: '女' }
  2. function fn(obj) {
  3. let arr = []
  4. for (let key in obj) {
  5. arr.push({ label: obj[key], value: key })
  6. }
  7. return arr
  8. }
  9. const arr = fn(obj)
  10. console.log(arr)

方法2:

  1. const obj = { 0: '男', 1: '女' }
  2. const arr = Object.keys(obj).map(item => {
  3. return {
  4. label:obj[item], // obj[item] 打印出来是['0','1']
  5. value:item
  6. }
  7. })
  8. console.log(arr);


输出结果: image.png


这里拓展一下Object.keys()这个方法:

作用:遍历对象

返回结果:

1.传入对象,返回属性名
2.传入字符串,返回索引
3.构造函数 返回空数组或者属性名

代码说明:

  1. // 1. 定义一个对象
  2. var obj = { 0:'熊大',1:'熊二',2:'光头强' }
  3. // 2. 使用Object.keys()方法
  4. var keyValue = Object.keys(obj)
  5. // 3. 打印结果
  6. console.log(keyValue) // 得到是:["0","1","2"]
  1. var arr = [
  2. { label: '男', value: 1 },
  3. { label: '女', value: 0 },
  4. ]
  5. let list = []
  6. arr.forEach((item) => {
  7. list.push(item.label)
  8. })
  9. console.log(list)

需求三 : 数组转对象,将某个值转为键

const arr = [{label: ‘男’ , value: 0}, {label: ‘女’, value:1}]

转换成

{0 : ‘男’ , 1: ‘女’}

方法1: forEach

  1. function fn(arr) {
  2. let obj = {}
  3. arr.forEach(item => obj[item.value] = item.name);
  4. return obj
  5. }

方法2 : reduce

  1. function fn(arr) {
  2. let res = arr.reduce((res, item) => {
  3. return {
  4. ...res,
  5. [item.value]: item.name
  6. }
  7. }, {});
  8. return res
  9. }

方法3:

  1. function fn(arr) {
  2. let res = arr.reduce((res, item) => {
  3. res[item.value] = item.name
  4. return res
  5. }, {});
  6. return res
  7. }