首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历JSON数据并使用NodeJS查找可能的组合

遍历JSON数据并使用NodeJS查找可能的组合
EN

Stack Overflow用户
提问于 2021-11-22 11:50:57
回答 1查看 51关注 0票数 0

我有以下JSON数据。如何遍历JSON数据并根据输入的名称找到可能的组合?

维度数组:

代码语言:javascript
复制
[
  {"value":"zabbixPy-API","name":"ApiName"}, 
  {"value":"qa","name":"Stage"}
]

示例:我提供了以下可能存在于Dimensions数组中的[D1

代码语言:javascript
复制
ApiId
ApiName
Stage    

如何构造变量key的示例。

代码语言:javascript
复制
function test(name) {
  if (Dimensions.name[0] && Dimensions.name[1] && Dimensions.name[2]) {
    key = Dimensions.name[0].value + "_" + Dimensions.name[1].value + "_" + Dimensions.name[2].value;
  } else if (Dimensions.name[0] && Dimensions.name[1]) {
    key = Dimensions.name[0].value + "_" + Dimensions.name[1].value;
  } else if (Dimensions.name[0]) {
    key = Dimensions.name[0].value;
  } else {
    key = Metrics[].MetricName;
  }

  return key;
}

test(uniqueMetricsArray);

但在我的例子中,uniqueMetricsArray长度可能是4或5,所以我不想写所有可能的if条件。有没有一种方法可以根据输入名称数组的长度遍历,找到它可能存在的所有可能的组合,并构造变量键?

因此维度数组可以是:

代码语言:javascript
复制
 ApiName + Stage + ApiId
 ApiName + Stage
 ApiId + Stage
 ApiId + ApiName  
 Stage
 ApiId

Full Json Data:

代码语言:javascript
复制
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: "",
  },
};

console.log(uniqueMetricsArray):的输出

代码语言:javascript
复制
ApiId
ApiName
Stage    

这就是实际的if条件可能的样子。我只是在上面的例子中缩短了它:

代码语言:javascript
复制
  if (sns.Trigger.Dimensions.find(dimension => dimension.name === name[0]) && sns.Trigger.Dimensions.find(dimension => dimension.name === name[1]) && sns.Trigger.Dimensions.find(dimension => dimension.name === name[2]) ) {
    var key = sns.Trigger.Dimensions.find(dimension => dimension.name === name[0]).value  + '_' + sns.Trigger.Dimensions.find(dimension => dimension.name === name[1]).value + '_' + sns.Trigger.Dimensions.find(dimension => dimension.name === name[2]).value
  }  
EN

回答 1

Stack Overflow用户

发布于 2021-11-22 12:09:14

好的。这是基于this answer to generate all combinations的,只适用于数组(假设您的字符串没有NUL字符)。

代码语言:javascript
复制
function generate(array) {
  if (!array.includes("")) array = [...array, ""]; // need the empty string to generate all combinations
  return array
    .flatMap((v, i) => array.slice(i + 1).map((w) => `${v}\x00${w}`))
    .map((atom) => atom.split("\x00").filter(Boolean));
}

console.log(generate(["ApiId", "ApiName", "Stage"]));

输出

代码语言:javascript
复制
[
  [ 'ApiId', 'ApiName' ],
  [ 'ApiId', 'Stage' ],
  [ 'ApiId' ],
  [ 'ApiName', 'Stage' ],
  [ 'ApiName' ],
  [ 'Stage' ]
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70065314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档