我有以下JSON数据。如何遍历JSON数据并根据输入的名称找到可能的组合?
维度数组:
[
{"value":"zabbixPy-API","name":"ApiName"},
{"value":"qa","name":"Stage"}
]示例:我提供了以下可能存在于Dimensions数组中的[D1
ApiId
ApiName
Stage 如何构造变量key的示例。
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条件。有没有一种方法可以根据输入名称数组的长度遍历,找到它可能存在的所有可能的组合,并构造变量键?
因此维度数组可以是:
ApiName + Stage + ApiId
ApiName + Stage
ApiId + Stage
ApiId + ApiName
Stage
ApiIdFull Json Data:
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):的输出
ApiId
ApiName
Stage 这就是实际的if条件可能的样子。我只是在上面的例子中缩短了它:
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
} 发布于 2021-11-22 12:09:14
好的。这是基于this answer to generate all combinations的,只适用于数组(假设您的字符串没有NUL字符)。
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"]));输出
[
[ 'ApiId', 'ApiName' ],
[ 'ApiId', 'Stage' ],
[ 'ApiId' ],
[ 'ApiName', 'Stage' ],
[ 'ApiName' ],
[ 'Stage' ]
]https://stackoverflow.com/questions/70065314
复制相似问题