如何从API输出的对象数组中提取指定维度与指标值组成数组
提取指定维度对应的指标值解决方案
需要从给定的API输出中提取维度值Unassigned及其对应的指标值64314,组成['Unassigned',64314]格式的数组。目前使用for-in循环遍历obj.rows时,只能输出dimensionValues和metricValues,无法完成对应值的映射,以下是几种可行的解决方案:
方法1:使用Array.find()快速定位目标行
find()方法可直接筛选出维度值为Unassigned的行,再提取对应值组成目标数组,代码简洁高效:
const targetRow = obj.rows.find(row => row.dimensionValues[0].value === 'Unassigned'); const result = [targetRow.dimensionValues[0].value, parseInt(targetRow.metricValues[0].value)]; console.log(result); // 输出: ['Unassigned', 64314]
方法2:使用forEach遍历所有行(替代for-in)
forEach更适配数组遍历,避免for-in可能带来的原型链遍历问题,同时在遍历中判断并提取目标值:
let result = []; obj.rows.forEach(row => { const dimValue = row.dimensionValues[0].value; const metricValue = parseInt(row.metricValues[0].value); if (dimValue === 'Unassigned') { result = [dimValue, metricValue]; } }); console.log(result); // 输出: ['Unassigned', 64314]
方法3:改进原有的for-in循环
如果坚持使用for-in,需确保遍历数组索引,同时正确取出嵌套的value值:
let result = []; for (const index in obj.rows) { const row = obj.rows[index]; const dimValue = row.dimensionValues[0].value; if (dimValue === 'Unassigned') { const metricValue = parseInt(row.metricValues[0].value); result = [dimValue, metricValue]; break; // 找到目标后停止遍历,提升效率 } } console.log(result); // 输出: ['Unassigned', 64314]
关键说明
metricValues中的value为字符串类型,需用parseInt()转换为数字,匹配目标数组格式要求dimensionValues和metricValues均为数组,因本次数据仅含一个维度和指标,直接取索引0对应的value即可
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

