如何解析数组中的对象?获取指定Un-Ranked playlist对象
问题:筛选特定条件的JSON对象并获取完整数据
需求:从给定JSON数据中,筛选出type为playlist且metadata.name为Un-Ranked的对象,获取其完整数据(如stats字段)。尝试代码console.log(data.segments.metadata.name[Un-Ranked])无法得到完整对象,寻求解决方法。
给定JSON数据示例:
{ "data": { "platformInfo": { "platformSlug": "steam", "avatarUrl": "xx" }, "segments": [ { "type": "overview", "attributes": {}, "metadata": { "name": "Lifetime" }, "expiryDate": "0001-01-01T00:00:00+00:00", "stats": { "wins": { "rank": 292589, "percentile": 93, "displayName": "Wins" } } }, { "type": "playlist", "attributes": { "playlistId": 0, "season": 23 }, "metadata": { "name": "Un-Ranked" }, "expiryDate": "0001-01-01T00:00:00+00:00", "stats": { "tier": { "rank": null, "percentile": null, "displayName": "Matches", "displayCategory": "General", "category": "general", "description": null, "metadata": { "iconUrl": "https://trackercdn.com/cdn/tracker.gg/rocket-league/ranks/s4-0.png", "name": "Unranked" }, "value": 0, "displayValue": "0", "displayType": "Number" } } } ], "availableSegments": [ { "type": "playlist", "attributes": { "season": 1 }, "metadata": { "name": "1" } }, { "type": "playlist", "attributes": { "season": 23 }, "metadata": { "name": "Season 9 (23)" } } ], "expiryDate": "2023-02-28T16:47:00.691118+00:00" } }
错误原因分析
data.segments是数组类型,不能直接通过.metadata访问数组元素的属性,必须遍历数组中的每个对象Un-Ranked是字符串字面量,未加引号会被JS解析为变量,导致语法错误或找不到对应值
解决方法
方法1:使用数组find方法(推荐,ES6+支持)
find方法会遍历数组,返回第一个满足筛选条件的完整对象:
// 筛选符合条件的对象 const targetSegment = data.segments.find(segment => segment.type === 'playlist' && segment.metadata.name === 'Un-Ranked' ); // 输出包含stats在内的完整对象 console.log(targetSegment);
方法2:使用for循环(兼容旧环境)
如果运行环境不支持ES6的find方法,可以用传统循环遍历:
let targetSegment = null; // 遍历segments数组 for (let i = 0; i < data.segments.length; i++) { const segment = data.segments[i]; // 检查是否符合条件 if (segment.type === 'playlist' && segment.metadata.name === 'Un-Ranked') { targetSegment = segment; break; // 找到目标后终止循环,提升效率 } } // 输出结果 console.log(targetSegment);
内容的提问来源于stack exchange,提问作者Phex
相关产品推荐
相关产品推荐

