数组解构
数组解构是ES6的新特性,在此做了一些小尝试
1.解构对象数组
let arr = [{
name:"冰冻黑熊"
},{
name:'冰冻白熊'
},{
name:"冰冻狗熊"
}]
const [a,b,c] = arr
console.log("a:",a.name,"b:",b.name,"c:",c.name)//a: 冰冻黑熊 b: 冰冻白熊 c: 冰冻狗熊
arr[0].name = '冰冻小熊'//修改指针指向空间的值
console.log("a:",a.name,"b:",b.name,"c:",c.name)//同样,数组解构,以指针的形式指向,对应位置,可以通过修改指针指向空间的值来修改const
使用const常量解构数组,与const常量指针的用法一样
2.多维数组解构
let color = ['red', ['white', 'black'],'green', 'blue'];
let [first,second] = color
console.log("first:",first,"second",second)//first: red second (2) ["white", "black"]
let [one,[two,three]] = color//当多维数组嵌套时,[two,three]的位置为数组,运用相同思维进行二重解构
console.log("one:",one," two:",two," three:",three)//one: red two: white three: black
多维数组的解构的基本思路不变,按为解析,解析到下层数组时,同样去遍历解构
3.不定元素
let animals = ['冰冻黑熊','冰冻奶熊','冰冻小熊','冰冻白熊']
let [name1,name2,...name3] = animals//name1与name2解构 animals中的前两位,...name3表示将animals中剩余元素赋值给一个元素
console.log("name1:",name1," name2",name2," name3",name3)//name1: 冰冻黑熊 name2 冰冻奶熊 name3 (2) ["冰冻小熊", "冰冻白熊"]
// let [a,...b,c] 将会报错,不定元素必须为解构的最后一个元素,否则报错
解构数组时,若不需要逐个解构,可将用…的写法将剩下的多个元素存入1个变量中,需注意不定元素只能为解构的最后一个元素
4.对象与数组的混合解构
let mix = {
person:{
basic:{
name:"冰冻黑熊",
age:21,
sex:"男"
}
},
hobby:["吃饭","睡觉"]
}
let {person:{basic},
hobby} = mix
console.log("basic:",basic," hobby",hobby)//basic: {name: "冰冻黑熊", age: 21, sex: "男"}age: 21name: "冰冻黑熊"sex: "男"[[Prototype]]: Object hobby (2) ["吃饭", "睡觉"]
console.log("basic.name:",basic.name," basic.age:",basic.age," basic.sex:",basic.sex)//basic.name: 冰冻黑熊 basic.age: 21 basic.sex: 男
对于数组与对象的混合解构,和多维数组解构的思路一样,碰见对象就使用解构对象的语法{}去逐层解构,遇见数组就使用解构数组的语法[]去逐步解构
let {person:{basic:{name,age,sex}},
hobby} = mix
console.log(name,age,sex)//冰冻黑熊 21 男
在1的基础上,继续解构basic。