如何在for循环中构造嵌套对象

时间:2018-06-18 22:24:47

标签: javascript for-loop ecmascript-6 destructuring

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);
}

2 个答案:

答案 0 :(得分:7)

您可以使用:

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} - 这会为{lat: "12", long: "13"}产生geo

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

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

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

{user, age = "DEFAULT AGE", geo: {lat, long}} - "12" lat"13" 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表示“关注{ prop = value }属性并将其值作为变量prop 1
  • prop表示“获取value的值作为变量prop,但如果undefined产生renamename > 2

对于“重命名”案例,规则以递归方式应用:{}{ anotherProp }类似,因此可以将其替换为{ anotherProp: anotherRename }{ anotherProp = anotherDefault }或{{ 1}},或{propA, propB}等。

同一对象级别的其他属性可以通过逗号添加,例如[]

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

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

2:“产量obj.prop”表示undefined等于undefined,这意味着该属性存在且具有文字值from django import forms from .models import Comment,Issue class CommentForm(forms.ModelForm): class Meta: model = Comment fields = ('body',) class IssueForm(forms.ModelForm): class Meta: model = Issue fields = ('title','content','project','status') class NewIssueForm(forms.ModelForm): class Meta: model = Issue fields = ('title','content','project','status') 或属性不存在。

答案 1 :(得分:1)

如果您只是想找到一个给定的用户并为其返回地理位置,那么这样做:

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

请注意,您可能希望对您的“查找结果”进行一些检查。在尝试使用它之前。例如:

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

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