[英]Get filtered values from nested object JavaScript
我有一个包含表单的每个对象的对象列表:
{
"myFilters": [
{
"isMatch": false,
"filters": [
{
"id": "aaaaaa",
"version": "v1"
},
{
"id": "kk",
"version": "v1"
}
]
}
],
"randomAttr1": null,
"randomAttr2": []
}
假设上面是一个来自存储在result
中的对象列表的对象。
现在我想获取所有版本的列表,并将其作为新元素relevant_versions
值添加回此对象,但条件是 Id 和版本必须在 URL 参数中。 这是我的尝试:
for (let f of result) {
f.relevant_versions = f.myFilters.filter(x=>x.filters
.filter(item=>(item.id == this.$route.params.filterId && item.version == this.$route.params.version))
.map(fid => fid.version))
}
但是我拥有整个myFilters
元素,而不是只有版本。 我想我已经接近并在这里犯了一个简单的错误。
我如何在此处适当地填充相关版本?
编辑:所以输出看起来像
{
"myFilters": [
{
"isMatch": false,
"filters": [
{
"id": "aaaaaa",
"version": "v1"
},
{
"id": "kk",
"version": "v1"
}
]
}
],
"randomAttr1": null,
"randomAttr2": [],
"relevant_versions":["v1", "v1"]
}
示例路由是localhost:8080/filters/kk/v1
。 这里kk
对应于this.$route.params.filterId
, v1
于this.$route.params.version
。
您不想过滤myFilters
对象,而是(平面)将其中的值映射到匹配的版本
const result = [{"myFilters":[{"isMatch":false,"filters":[{"id":"aaaaaa","version":"v1"},{"id":"kk","version":"v1"}]}],"randomAttr1":null,"randomAttr2":[]}] this.$route = {params:{filterId:"kk",version:"v1"}} // this avoids mutating `results` const modifiedResult = result.map(f => ({ ...f, relevant_versions: f.myFilters.flatMap(({ filters }) => filters.filter(({ id, version }) => id == this.$route.params.filterId && version == this.$route.params.version ).map(({ version }) => version) ) })) console.info(modifiedResult)
.as-console-wrapper { max-height: 100% !important; }
如果您确实想改变result
,则用forEach
替换顶级map
或使用for..of
循环,如您的问题
result.forEach(f => {
f.relevant_versions = f.myFilters.flatMap(...)
})
// or
for (let f of result) {
f.relevant_versions = f.myFilters.flatMap(...)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.