#javascript
#javascript
Вопрос:
У меня есть объект JSON, который имеет массив, как показано ниже
{
"objects": [
{
"severity": "LOW",
"tags": [
{
"key": "account",
"values": [
"account2"
]
},
{
"key": "accountId",
"values": [
"2"
]
}
],
"name": "object1"
},
{
"severity": "HIGH",
"tags": [
{
"key": "account",
"values": [
"account2"
]
},
{
"key": "accountId",
"values": [
"2"
]
}
],
"name": "object2"
},
{
"severity": "MEDIUM",
"tags": [
{
"key": "account",
"values": [
"account44"
]
},
{
"key": "accountId",
"values": [
"44"
]
}
],
"name": "object2"
},
{
"severity": "HIGH",
"tags": [
{
"key": "account",
"values": [
"account42"
]
},
{
"key": "accountId",
"values": [
"42"
]
}
],
"name": "object2"
}
]
}
Я хочу иметь возможность просматривать массив с помощью javascript, и если серьезность высока, а acccountID соответствует 2, например, чтобы установить предупреждение. Даже если учетная запись 2 может иметь НИЗКУЮ степень серьезности, как показано, я все равно хочу, чтобы условие if было истинным.
Итак, что-то вроде if (objects.some(a =>(a.severity ==="LOW" amp;amp; ......
или любой другой лучший вариант, который есть.
Комментарии:
1. Используйте оператор or (
||
). developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…
Ответ №1:
Вы можете выполнить цикл по своему объекту и сопоставить свои свойства следующим образом
const data = { "objects": [ { "severity": "LOW", "tags": [ { "key": "account", "values": [ "account2" ] }, { "key": "accountId", "values": [ "2" ] } ], "name": "object1" }, { "severity": "HIGH", "tags": [ { "key": "account", "values": [ "account2" ] }, { "key": "accountId", "values": [ "2" ] } ], "name": "object2" }, { "severity": "MEDIUM", "tags": [ { "key": "account", "values": [ "account44" ] }, { "key": "accountId", "values": [ "44" ] } ], "name": "object2" }, { "severity": "HIGH", "tags": [ { "key": "account", "values": [ "account42" ] }, { "key": "accountId", "values": [ "42" ] } ], "name": "object2" } ] };
// Loop
for(let i = 0; i < data.objects.length; i ) {
// Set severity
const severity = data.objects[i].severity;
// Set ID
let id; for(let ii = 0; ii < data.objects[i].tags.length; ii ) if(data.objects[i].tags[ii].key === 'accountId') id = data.objects[i].tags[ii].values[0];
// Do logic here
if(severity === 'LOW' amp;amp; id === '2') console.log(data.objects[i]);
}
Комментарии:
1. @dontke проверьте мой обновленный код — теперь довольно просто подобрать то, что вам нужно
Ответ №2:
Если вы выполняете цикл-предотвратите:
if (objects.some(e => e.severity === severity || e.tags.some(t => t.key === 'accountId' amp;amp; t.values.includes(accountId)))) {
...
Для наглядности это замыкание:
return e =>
e.severity === severity ||
e.tags.some(t =>
t.key === 'accountId' amp;amp;
t.values.includes(accountId));
например
const j = { "objects": [ { "severity": "LOW", "tags": [ { "key": "account", "values": [ "account2" ] }, { "key": "accountId", "values": [ "2" ] } ], "name": "object1" }, { "severity": "HIGH", "tags": [ { "key": "account", "values": [ "account2" ] }, { "key": "accountId", "values": [ "2" ] } ], "name": "object2" }, { "severity": "MEDIUM", "tags": [ { "key": "account", "values": [ "account44" ] }, { "key": "accountId", "values": [ "44" ] } ], "name": "object2" }, { "severity": "HIGH", "tags": [ { "key": "account", "values": [ "account42" ] }, { "key": "accountId", "values": [ "42" ] } ], "name": "object2" } ] };
function condition(severity, accountId) {
return e =>
e.severity === severity ||
e.tags.some(t =>
t.key === 'accountId' amp;amp;
t.values.includes(accountId));
}
if (j.objects.some(condition('LOW', '2'))) {
console.log("warning: low || 2");
}
if (j.objects.some(condition('SUPER_HIGH', '4048'))) {
console.log("warning: super high || 4048");
}