Как проверить, содержит ли массив два значения с помощью Javascript

#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");
}