如何在for循环中解构嵌套对象
How to destructure nested objects in for-loop
var users = [
{ user: "Name1",geo:{lat:'12',long:'13'} },
{ user: "Name2",geo:{lat:'12',long:'13'}, age: 2 },
{ user: "Name2",geo:{lat:'12',long:'13'} },
{ user: "Name3",geo:{lat:'12',long:'13'}, age: 4 }
];
上面是对象数组。
这是 for-loop
我解构并获取用户和年龄,但我想要纬度和经度,我该怎么做?我希望它通过解构和 for-loop
就像我对 user 和 age
所做的那样
for (let { user, age = "DEFAULT AGE" } of users) {
console.log(user, age);
}
如果您只是想找到给定的用户和 return 它的地理位置,这样做:
users.find( u => u.user === 'Name1' ).geo;
请记住,在尝试使用它之前,您需要对 'find result' 进行一些检查。例如:
const user = users.find( u => u.user === 'Name1' );
if (user && user.hasOwnProperty('geo')) {
console.log(user.geo);
}
你可以使用这个:
for (let {user, age = "DEFAULT AGE", geo: {lat, long}} of users) {
console.log(user, age, lat, long);
}
您已经成功解构了 user
(仅通过对象中的 属性 名称)和 age
(还有默认值)。
要逐步使用嵌套 destructuring,只需将 属性 名称 geo
也放在那里,因为那是对象上的下一个 属性正在迭代包含您需要的值:
{user, age = "DEFAULT AGE", geo}
— 对于 geo
.
这将产生 {lat: "12", long: "13"}
要直接访问嵌套属性,请遵循对象结构:
{user, age = "DEFAULT AGE", geo: {}}
— 这只会验证geo
确实是一个对象。
然后,列出您要在该对象中访问的属性:
{user, age = "DEFAULT AGE", geo: {lat, long}}
— 这会产生 "12"
for lat
和 "13"
for long
.
您甚至可以更进一步 重命名 这些属性:
{user, age = "DEFAULT AGE", geo: {lat: latitude, long: longitude}}
— 这将产生 "12"
对应 latitude
和 "13"
对应 longitude
.
这些是解构对象的基本情况:
name
表示“将整个值赋给 name
”。
{}
表示“检查要解构的值是一个对象还是可以转换为一个对象,即既不是 null
也不是 undefined
;不创建变量。
{ prop }
表示“获取prop
的值作为变量prop
”。
{ prop: rename }
表示“跟随prop
属性并获取其值作为变量rename
”1.
{ prop = value }
表示“获取 prop
的值作为变量 prop
,但如果 prop
产生 undefined
,则分配 value
” 2.
对于“重命名”的情况,规则递归适用:rename
类似于 name
,因此可以用 {}
,或 { anotherProp }
,或{ anotherProp: anotherRename }
,或{ anotherProp = anotherDefault }
,等等
同一对象级别的其他属性可以通过逗号添加,例如 {propA, propB}
.
对于数组,存在类似的情况:[]
将验证要解构的值是一个 iterable 对象; [a, b]
与{0: a, 1: b}
同义;等等
1:请注意,在 { prop: something }
的情况下,没有创建变量 prop
。
2:“yields undefined
”意味着 obj.prop
将等于 undefined
这意味着 属性 存在并且具有字面值 undefined
或者 属性 不存在。
var users = [
{ user: "Name1",geo:{lat:'12',long:'13'} },
{ user: "Name2",geo:{lat:'12',long:'13'}, age: 2 },
{ user: "Name2",geo:{lat:'12',long:'13'} },
{ user: "Name3",geo:{lat:'12',long:'13'}, age: 4 }
];
上面是对象数组。
这是 for-loop
我解构并获取用户和年龄,但我想要纬度和经度,我该怎么做?我希望它通过解构和 for-loop
就像我对 user 和 age
for (let { user, age = "DEFAULT AGE" } of users) {
console.log(user, age);
}
如果您只是想找到给定的用户和 return 它的地理位置,这样做:
users.find( u => u.user === 'Name1' ).geo;
请记住,在尝试使用它之前,您需要对 'find result' 进行一些检查。例如:
const user = users.find( u => u.user === 'Name1' );
if (user && user.hasOwnProperty('geo')) {
console.log(user.geo);
}
你可以使用这个:
for (let {user, age = "DEFAULT AGE", geo: {lat, long}} of users) {
console.log(user, age, lat, long);
}
您已经成功解构了 user
(仅通过对象中的 属性 名称)和 age
(还有默认值)。
要逐步使用嵌套 destructuring,只需将 属性 名称 geo
也放在那里,因为那是对象上的下一个 属性正在迭代包含您需要的值:
{user, age = "DEFAULT AGE", geo}
— 对于 geo
.
{lat: "12", long: "13"}
要直接访问嵌套属性,请遵循对象结构:
{user, age = "DEFAULT AGE", geo: {}}
— 这只会验证geo
确实是一个对象。
然后,列出您要在该对象中访问的属性:
{user, age = "DEFAULT AGE", geo: {lat, long}}
— 这会产生 "12"
for lat
和 "13"
for long
.
您甚至可以更进一步 重命名 这些属性:
{user, age = "DEFAULT AGE", geo: {lat: latitude, long: longitude}}
— 这将产生 "12"
对应 latitude
和 "13"
对应 longitude
.
这些是解构对象的基本情况:
name
表示“将整个值赋给name
”。{}
表示“检查要解构的值是一个对象还是可以转换为一个对象,即既不是null
也不是undefined
;不创建变量。{ prop }
表示“获取prop
的值作为变量prop
”。{ prop: rename }
表示“跟随prop
属性并获取其值作为变量rename
”1.{ prop = value }
表示“获取prop
的值作为变量prop
,但如果prop
产生undefined
,则分配value
” 2.
对于“重命名”的情况,规则递归适用:rename
类似于 name
,因此可以用 {}
,或 { anotherProp }
,或{ anotherProp: anotherRename }
,或{ anotherProp = anotherDefault }
,等等
同一对象级别的其他属性可以通过逗号添加,例如 {propA, propB}
.
对于数组,存在类似的情况:[]
将验证要解构的值是一个 iterable 对象; [a, b]
与{0: a, 1: b}
同义;等等
1:请注意,在 { prop: something }
的情况下,没有创建变量 prop
。
2:“yields undefined
”意味着 obj.prop
将等于 undefined
这意味着 属性 存在并且具有字面值 undefined
或者 属性 不存在。