我的目的是引用嵌套的json structure
中的特定视图(A,B或C)。
this.selected_table = this.all_tables.views.find(x => x)['A'];
这是使用过滤器的正确方法,因为我发现的所有示例在array.find()
中都有一些条件。就我而言,它没有条件就可以工作,但是我觉得array.find()
就我而言是不必要的吗?但是,我找不到其他方法。
JSON对象
all_tables = {
"views":[
{
"A":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"B":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"C":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
]
}
]
}
答案 0 :(得分:2)
通常,Array.prototype.find
用于根据内部函数是否返回true来查找数组中的特定元素。在您的示例中,您将返回x
,它是views
数组中的对象,因此其结果为true
。因此,您的.find
只是返回了views
数组中的一个对象(或更具体地说,返回了views
数组中的第一个对象)。既然是这种情况,则不需要.find()
,而是可以使用其索引直接引用views
中的对象:
this.selected_table = this.all_tables.views[0]['A']
请参见以下示例:
all_tables = {
"views":[
{
"A":[
{
"id":"a",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"a2",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"B":[
{
"id":"b",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"b2",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"C":[
{
"id":"c",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"c2",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
]
}
]
};
console.log(all_tables.views[0]['A']);
console.log(all_tables.views[0]['C']);
答案 1 :(得分:0)
.find(x => x)
将返回数组中的第一项为真,否则为false,0,'',未定义或null。
不确定我是否完全遵循您的问题,但是您是否要查找包含A属性的视图,然后返回该属性?
const getProp = (views, prop) => {
const view = views.find(v => v[prop]);
//Will return the first view that has a property called prop
return view && view[prop]; // If it found one return the property
};
然后您就可以使用
const prop = getProp(views, 'A');