繁体   English   中英

从嵌套对象 JavaScript 中获取过滤值

[英]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.filterIdv1this.$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.

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