ynizhenie
@ynizhenie

Как сделать слияние и проверку массива?

Столкнулся с такой проблемой.
У меня есть основной массив данных:
Он выводится на основную страницу приложения.

Array [
  Object {
    "idSite": 123456,
    "status": "C",
    "type": 1
  },
  Object {
    "idSite": 123451,
    "status": "O",
   "type": 4   
  },
  Object {
    "idSite": 123458, 
    "status": "N", 
    "type": 1
  },
  Object {
    "idSite": 123455,
    "status": "C", 
    "type": 3,
  }
]


И Есть второй массив который выводится на другую страницу:
Он выглядит так:
[
  {
"idSite": 123456,
"typetext": "System armed",
"status": "C"
},
  {
"idSite": 123456,
"typetext": "System unarmed",
"status": "O"
},
  {
"idSite": 123455,
"typetext": "Battery low",
"status": "C"
}


Вопрос как меня перенести значения type из первого массива во второй. Но не просто произвести слияние а проверяя idSite. То есть если idSite из первого массива равен idSite второго массива то мы добавляем второму idSite Значение type из первого массива.Чтобы в итоге у меня второй массив стал таким:

[
  {
"idSite": 123456,
"typetext": "System armed",
"status": "C",
 "type": 1
},
  {
"idSite": 123456,
"typetext": "System unarmed",
"status": "O",
 "type": 1
},
  {
"idSite": 123455,
"typetext": "Battery low",
"status": "C",
 "type": 3,
}


По техническим причинам на стороне бэкенда нету возможности добавить во второй массив значение type.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
По техническим причинам на стороне бэкенда нету возможности добавить во второй массив значение type.

По-моему, вас обманули.

array2.forEach(el2 => {
 el2.type = array1.find(el1 => el1.idSite === el2.idSite);
});


Но если данных очень много, то быстрей отработает такой вариант:
const array1Clone = array1.slice(0);

array2.forEach(el2 => {
 const index = array1Clone.findIndex(el1 => el1.idSite === el2.idSite);
 
 if (index > -1) {
    el2.type = array1Clone.splice(index,1)[0].type;
 }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы