我是 JS 新手,正在嘗試完成一項任務,但沒有找到確切的解決方案。這是我第一次發布問題,所以請在我出錯的地方糾正我。
這是我的問題
這是我的 JSON 檔案的一小部分,超過 3000 行,我已經給出了相同 JSON 檔案的確切格式
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"ABC": "yes",
"KPI": "M1",
"__name__": "m1_status",
"cloud": "m1",
"cloud_kpi": "m1 status",
"instance": "m1.e1.s1",
"job": "m1",
"src": "m1.m1.m1",
"src_vm": "m1",
"timespan": "2h"
},
"value": [
1653633595.484,
"100"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M2",
"__name__": "m1_status",
"cloud": "m2",
"cloud_kpi": "m1.e1",
"instance": "m2",
"job": "m2 services",
"src": "m2.m3",
"src_vm": "m2",
"timespan": "2h"
},
"value": [
1653633595.484,
"99.919094"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M2",
"__name__": "m1_status",
"cloud": "m2",
"cloud_kpi": "m1.e1",
"instance": "m2",
"job": "m2 services",
"src": "m2.m3",
"src_vm": "m2",
"timespan": "2h"
},
"value": [
1653633595.484,
"98.406375"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M1",
"__name__": "m1_status",
"cloud": "m1",
"cloud_kpi": "m1 status",
"instance": "m1.e1.s1",
"job": "m1",
"src": "m1.m1.m1",
"src_vm": "m1",
"timespan": "2h"
},
"value": [
1653633595.484,
"100"
]
}
}
我的問題是如何檢查完整的 JSON 檔案并搜索云鍵及其值并顯示該值的最小值。
例如,我必須在整個 JSON 中獲取名稱為 M1 的云,這可能會出現大約 12 次。
“云”:“m2”,“cloud_kpi”:“m1.e1”
在上面的行中,我需要的鍵是云,值是 m2。在此之后,我必須獲取這個云的價值,也就是說,
“價值”:[1653633595.484,“100”]
這里我需要的值是 100。
同樣,我必須在完整的 JSON 檔案中檢查這些值并獲得大約 12 個值
m1-100 m1-100 m2-33 m1-44 .......以此類推
獲得這些值后,我需要找到其中的最小值并顯示它們。
同樣,我必須獲取所有云及其最小值,即 M1-min(100,98,94...) M2-min(100,38,99,...) M3-min(100 ,39,20..) 等等....
我嘗試了 map 方法,這讓我感到困惑,而且對于每種方法,最后我只能獲取所有云名稱但不能進一步移動
response.json().then(function (data) {
var jsonarray = data["data"]["result"]
for (var k in jsonarray) {
if (jsonarray[k] instanceof Object) {
console.log(jsonarray[k].metric.cloud)
}
}
});
請讓我知道下一步我必須嘗試什么。
uj5u.com熱心網友回復:
您可以使用Array.filter()來查找陣列的值并Math.min()查找其引數的最小值
response.json().then(function(data){
var jsonarray = data.data.result.filter(item => item.metric.cloud == 'm2') // here you will have all of the objects with the cloud m2
const min = Math.min(...jsonarray.map(item => item.value[1]))
console.log(min) // the minimum value
})
uj5u.com熱心網友回復:
filter找出云 ID 與查詢匹配的物件。map在該陣列上僅回傳您需要的值。從該陣列中使用 找到最小值
Math.min。
const data={status:"success",data:{resultType:"vector",result:[{metric:{ABC:"yes",KPI:"M1",__name__:"m1_status",cloud:"m1",cloud_kpi:"m1 status",instance:"m1.e1.s1",job:"m1",src:"m1.m1.m1",src_vm:"m1",timespan:"2h"},value:[1653633595.484,"100"]},{metric:{ABC:"yes",KPI:"M2",__name__:"m1_status",cloud:"m2",cloud_kpi:"m1.e1",instance:"m2",job:"m2 services",src:"m2.m3",src_vm:"m2",timespan:"2h"},value:[1653633595.484,"99.919094"]},{metric:{ABC:"yes",KPI:"M2",__name__:"m1_status",cloud:"m2",cloud_kpi:"m1.e1",instance:"m2",job:"m2 services",src:"m2.m3",src_vm:"m2",timespan:"2h"},value:[1653633595.484,"98.406375"]},{metric:{ABC:"yes",KPI:"M1",__name__:"m1_status",cloud:"m1",cloud_kpi:"m1 status",instance:"m1.e1.s1",job:"m1",src:"m1.m1.m1",src_vm:"m1",timespan:"2h"},value:[1653633595.484,"999"]}]}};
function findMinimum(data, key) {
// `filter` out the objects where the value
// of `cloud` matches your query
const result = data.data.result.filter(obj => {
return obj.metric.cloud?.toLowerCase() === key.toLowerCase();
// For each object return the second element
// of the value array
}).map(obj => {
return obj.value[1];
});
// `spread` out the array and use `Math.min` to
// find the minimum value
return Math.min(...result);
}
console.log(`Minimum value: ${findMinimum(data, 'M1')}`);
附加檔案
可選鏈接
傳播語法
uj5u.com熱心網友回復:
請檢查以下代碼:
const data = response.json();
const result = data.data.result;
// mapping
const mappedArray = result.map(x => ({
cloud: x.metric.cloud,
value: Number(x.value[1] ?? 0)
}))
const maxSorted = mappedArray.sort((x, y) => y.value - x.value) // sorting
const minSorted = mappedArray.sort((x, y) => x.value - y.value)
const maxValue = maxSorted[0] ?? null;
const minValue = minSorted[0] ?? null;
console.log(maxValue); // max value
console.log(minValue); // min value
短樣式:
response.json().then((data) => {
const minValue = data.data.result.map(x => ({
cloud: x.metric.cloud,
value: Number(x.value[1] ?? 0)
})).sort((x, y) => x.value - y.value)
console.log(minValue)
})
uj5u.com熱心網友回復:
因為您想在陣列中的所有物件中列印最小值。您可以簡單地獲取單獨陣列中的所有值,然后使用Math.min(...array)您可以獲取最小值。
演示:
const obj = {
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"ABC": "yes",
"KPI": "M1",
"__name__": "m1_status",
"cloud": "m1",
"cloud_kpi": "m1 status",
"instance": "m1.e1.s1",
"job": "m1",
"src": "m1.m1.m1",
"src_vm": "m1",
"timespan": "2h"
},
"value": [
1653633595.484,
"100"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M2",
"__name__": "m1_status",
"cloud": "m2",
"cloud_kpi": "m1.e1",
"instance": "m2",
"job": "m2 services",
"src": "m2.m3",
"src_vm": "m2",
"timespan": "2h"
},
"value": [
1653633595.484,
"99.919094"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M2",
"__name__": "m1_status",
"cloud": "m2",
"cloud_kpi": "m1.e1",
"instance": "m2",
"job": "m2 services",
"src": "m2.m3",
"src_vm": "m2",
"timespan": "2h"
},
"value": [
1653633595.484,
"98.406375"
]
},
{
"metric": {
"ABC": "yes",
"KPI": "M1",
"__name__": "m1_status",
"cloud": "m1",
"cloud_kpi": "m1 status",
"instance": "m1.e1.s1",
"job": "m1",
"src": "m1.m1.m1",
"src_vm": "m1",
"timespan": "2h"
},
"value": [
1653633595.484,
"100"
]
}]
}
};
const values = [];
obj.data.result.forEach(obj => {
obj.value.forEach(value => {
values.push(Math.round(value))
});
});
console.log(Math.min(...values));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486465.html
標籤:javascript json 映射 哈希集
