javascript - 如何映射和过滤对象数组?
问题描述
对不起,伙计们,但我有一个愚蠢的问题..我需要从 json 响应中迭代对象并仅获取满足某些条件的对象.. 响应是这样的:
result = [
{
"type": "EVENT",
"id": "001",
"tags": [
{
"id": "98765",
"name": "home"
}
]
},
{
"type": "EVENT",
"id": "002",
"tags": [
{
"id": "7654",
"name": "contact"
}
]
},
{
"type": "EVENT",
"id": "003",
"tags": []
}
]
我只需要使用类型为“事件”且标签中的名称属性为 home 的那些。
我尝试了映射和过滤,但没有得到想要的结果
const eventType = result.filter(type => type.type == 'EVENT')
const nameFilter =
eventType.map(item => item.tags)
.filter(sub => sub.length) // remove empty []
.map(subarray => subarray.map(element => element.name )
.filter(element => element == 'home'));
结果:
[
['home'], // dosen t work for me, because need all the object
[],
[]
]
解决方案
您可以使用filter
遍历数组。用于some
检查数组中的至少一个元素是否具有值为 的tags
属性:name
"home"
result.filter(o => o.type === "EVENT" && o.tags.some(s => s.name === "home"));
演示:
let result = [{"type":"EVENT","id":"001","tags":[{"id":"98765","name":"home"}]},{"type":"EVENT","id":"002","tags":[{"id":"7654","name":"contact"}]},{"type":"EVENT","id":"003","tags":[]}];
let filtered = result.filter(o => o.type === "EVENT" && o.tags.some(s => s.name === "home"));
console.log( filtered );
推荐阅读
- java - Camunda BPM 的 JavaDelegate 类应该是线程安全的吗?
- amazon-web-services - AWS:使用 https 将非 www 重写为 www
- c# - WPF 弹出窗口 - 无法使用 DynamicResource
- alexa - 如何禁用 Alexa 的“假日惊喜保护”
- javascript - 通过脚本 jquery 将事件类型 (keyup) 更改为 (keyup.enter)
- google-sheets - Google表格:自动将日期公式添加到最后一行
- php - 根据范围条件自动将产品添加到 WooCommerce 购物车
- python - Kafka python AvroConsumer seek 方法
- tree - 查找树的所有值分配,其中每个节点的路径具有唯一元素
- c# - 某些项目的依赖项包含无法解释的代码分析器