Javascript: проверка, существует ли элемент в массиве внутри объекта - PullRequest
1 голос
/ 01 мая 2020

Я создаю объект, который затем преобразуется в json. У меня есть следующее:

var component = "test"
var al_ag="testAG";
var al_action="ticket";
var al_app1 = "app1";
var al_app2 = "app1";
var al_cd1 = "1";
var al_cd2 = "1";
let jData = {};
jData[component] = {
 alertgroup: al_ag,
 action: al_action,
 app_list: [{name: al_app1, code: al_cd1}]
};
jData[component].app_list.push({name: al_app2, code: al_cd2});
console.log(JSON.stringify(jData, null, '\t'));

JSON .stringify (jData) перечисляет app_list как массив из двух элементов.

.
"app_list": [
            {
                "name": "app1",
                "code": "1"
            },
            {
                "name": "app2",
                "code": "2"
            }
        ]
.

Перед выполнением app_list.{name: al_app2, code: al_cd2}, как я могу проверьте, существует ли уже app1, а не pu sh, если оно уже существует.

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Вы можете просто использовать ! array.some (), чтобы проверить, существует ли элемент is not в

.

let component = "test"
  , al_ag     = "testAG"
  , al_action = "ticket"
  , al_app1   = "app1"
  , al_app2   = "app1"
  , al_cd1    = "1"
  , al_cd2    = "1"
  , jData     = {}
;

jData[component] = { alertgroup: al_ag
                   , action: al_action
                   , app_list: [{ name: al_app1, code: al_cd1 }]
                   };

let newOne = { name: al_app2, code: al_cd2 }

if (!jData[component].app_list.some(el=>el.name===newOne.name && el.code===newOne.code)  )
  {
  jData[component].app_list.push(newOne);
  }

console.log(JSON.stringify(jData, null, 2));

do c => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

0 голосов
/ 01 мая 2020

Я просто поместил код, основанный на вашем коде. И используя findIndex , чтобы проверить, существует ли app1 на app_list или нет. Если индекс равен -1, это означает, что app1 не существует в списке.

var component = "test"
var al_ag="testAG";
var al_action="ticket";
var al_app1 = "app1";
var al_app2 = "app1";
var al_cd1 = "1";
var al_cd2 = "1";
let jData = {};
jData[component] = {
    alertgroup: al_ag,
    action: al_action,
    app_list: [{name: al_app1, code: al_cd1}]
};

// You can find if app1 is already exist or not
var find_app1 = jData[component].app_list.findIndex(data => data.name === 'app1');

// If the data already exist then push app2
if (find_app1 > -1) {
    console.log('app1 Exist')
    jData[component].app_list.push({name: al_app2, code: al_cd2});
} else {
    console.log('app1 is not Exist')
}
console.log(JSON.stringify(jData, null, '\t'));
0 голосов
/ 01 мая 2020

Вот пример использования фильтра для обоих объектов app2 и app3 . Обратите внимание, что нет дубликатов.

let app_list = [
      {
          "name": "app1",
          "code": "1"
      },
      {
          "name": "app2",
          "code": "2"
      }
  ]

// Check app2 doesn't already exist in array
if (app_list.filter(a => a.name === "app2").length === 0) {
  app_list.push({ name: "app2", "code": 2 });
}

// Check app3 doesn't already exist in array
if (app_list.filter(a => a.name === "app3").length === 0) {
  app_list.push({ name: "app3", "code": 3 });
}

console.log(app_list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...