NodeJS遍历JSON数据 按输入名称生成维度组合并构造key的方法
动态维度组合Key生成实现方案
完全可以通过数组遍历逻辑实现自适应任意长度的维度名称输入,不需要写固定层数的if判断,实现代码如下:
核心实现代码
function generateDimensionKey(uniqueMetricsArray, snsData) { // 将维度数组转为键值映射,避免重复遍历查找,提升效率 const dimensionMap = Object.fromEntries( snsData.Trigger.Dimensions.map(item => [item.name, item.value]) ); // 按输入的维度名顺序筛选出存在的维度值 const existDimensionValues = uniqueMetricsArray .map(dimName => dimensionMap[dimName]) .filter(Boolean); // 有匹配维度就按下划线拼接,无匹配则返回指标名称 return existDimensionValues.length > 0 ? existDimensionValues.join('_') : snsData.Trigger.MetricName; }
调用示例
结合你给出的样例数据调用函数:
// 输入的维度名列表 const uniqueMetricsArray = ['ApiId', 'ApiName', 'Stage']; // 你的JSON数据源 const jsondata = { AlarmName: "Zabbix PY 5XX - By Stage QA", AlarmDescription: null, AWSAccountId: "123456", NewStateValue: "ALARM", NewStateReason: "Threshold Crossed: 1 out of the last 1 datapoints [1.0 (06/11/21 12:16:00)] was greater than or equal to the threshold (1.0) (minimum 1 datapoint for OK -> ALARM transition).", StateChangeTime: "2021-11-06T12:17:43.811+0000", Region: "Asia Pacific (Mumbai)", AlarmArn: "arn:aws:cloudwatch:ap-south-1:123456:alarm:Zabbix PY 5XX - By Stage QA", OldStateValue: "INSUFFICIENT_DATA", Trigger: { MetricName: "5XXError", Namespace: "AWS/ApiGateway", StatisticType: "Statistic", Statistic: "MINIMUM", Unit: null, Dimensions: [ { value: "zabbixPy-API", name: "ApiName" }, { value: "qa", name: "Stage" }, ], Period: 60, EvaluationPeriods: 1, ComparisonOperator: "GreaterThanOrEqualToThreshold", Threshold: 1, TreatMissingData: "- TreatMissingData: missing", EvaluateLowSampleCountPercentile: "", }, }; const key = generateDimensionKey(uniqueMetricsArray, jsondata); console.log(key); // 输出结果:zabbixPy-API_qa
实现优势
- 自适应任意长度的输入维度名列表,后续新增维度不需要修改函数逻辑
- 仅需遍历1次维度数组生成映射,后续查找复杂度为O(1),比多次调用
find方法效率更高 - 维度拼接顺序完全和输入的
uniqueMetricsArray顺序一致,调整顺序不需要修改函数代码 - 自动过滤不存在的维度,和你原有固定if判断的逻辑完全对齐
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

