繁体   English   中英

如何在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我解构并获得用户和年龄,但我想要lat和long我也将如何做到这一点? 我希望它通过解构和for-loop就像我用户和年龄一样

for (let { user, age = "DEFAULT AGE" } of users) {
  console.log(user, age);
}

你可以用这个:

for (let {user, age = "DEFAULT AGE", geo: {lat, long}} of users) {
  console.log(user, age, lat, long);
}

您已经成功地对user (仅通过对象中的属性名称)和age (也使用默认值)进行了解构。

要逐步使用嵌套解构 ,只需将属性名称geo放在那里,因为这是您正在迭代的对象的下一个属性,其中包含您需要的值:

{user, age = "DEFAULT AGE", geo} -这将产生{lat: "12", long: "13"}geo

要直接访问嵌套属性,请遵循以下对象结构:

{user, age = "DEFAULT AGE", geo: {}} - 这只会验证geo确实是一个对象。

然后,列出要在该对象中访问的属性:

{user, age = "DEFAULT AGE", geo: {lat, long}} - 这将为lat产生"12" ,为long "13"

你甚至可以更进一步, 重命名这些属性:

{user, age = "DEFAULT AGE", geo: {lat: latitude, long: longitude}} -这将产生"12"latitude"13"longitude


这些是解构对象的基本情况:

  • name表示“只需将整个值分配给name ”。
  • {}表示“检查要解构的值是一个对象还是可以转换为一个,即既不是null也不是undefined ; 不创造变数“。
  • { prop }表示“将prop的值作为变量prop ”。
  • { prop: rename }表示“跟随prop属性并将其值作为变量rename1
  • { prop = value }的意思是“得到的值prop作为可变prop ,但分配value如果prop产量undefined2。

对于“重命名”情况,规则以递归方式应用: rename就像name一样,因此可以用{}{ anotherProp }{ anotherProp: anotherRename }{ anotherProp = anotherDefault }{ anotherProp = anotherDefault }

可以通过逗号添加同一对象级别的其他属性,例如{propA, propB}

对于数组,存在类似的情况: []将验证要解构的值是可迭代对象; [a, b]{0: a, 1: b}具有相同的含义; 等等


1:请注意,在{ prop: something }的情况下,不会创建变量prop

2:“yield undefined ”意味着obj.prop将等于undefined ,这意味着该属性存在且文本值undefined或该属性不存在。

如果您只是想找到给定用户并为其返回地理位置,则会执行以下操作:

users.find( u => u.user === 'Name1' ).geo;

请记住,在尝试使用之前,您需要对“查找结果”进行一些检查。 例如:

const user = users.find( u => u.user === 'Name1' );

if (user && user.hasOwnProperty('geo')) {
    console.log(user.geo);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM