сравнить с массивами объектов и обновить ключ в угловых 6 машинописи - PullRequest
0 голосов
/ 25 апреля 2019
listOne: [
{ 
  id: 1,
  compId: 11,
  active: false, 
},
{ 
  id: 2,
  compId: 22,
  active: false, 
},
{ 
  id: 3,
  compId: 33,
  active: false, 
},
]

listTwo: [
{ 
  id: 1,
  compId: 11,
  active: true, 
},
{ 
  id: 2,
  compId: 33,
  active: false, 
},
]

У меня есть два json, вот как сравнить с compId ключ и обновить активный ключ в listOne из listTwo , если compId такое же.

В AngularJs я пробовал ниже по этой ссылке для AngularJs

Но как интегрировать с Angular 6 с Typescript.

И ожидаемый результат listOne: [ { id: 1, compId: 11, active: true, }, { id: 2, compId: 22, active: false, }, { id: 3, compId: 33, active: false, }, ]

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Вы можете использовать карту и фильтр, как это

listOne = listOne.map(item => {
       let exist = listTwo.filter(c=>c.compId == item.compId)[0];
       if(exist != undefined){

           item.active = exist.active;
           return item;
       }else{
           return item;
       }
    });

let listOne= [
{ 
  id: 1,
  compId: 11,
  active: false, 
},
{ 
  id: 2,
  compId: 22,
  active: false, 
},
{ 
  id: 3,
  compId: 33,
  active: false, 
},
]

let listTwo= [
{ 
  id: 1,
  compId: 11,
  active: true, 
},
{ 
  id: 2,
  compId: 33,
  active: false, 
},
]

//let arr3 = [];

listOne = listOne.map(item => {
   let exist = listTwo.filter(c=>c.compId == item.compId)[0];
   if(exist != undefined){
       //item.id = exist.id;
       item.active = exist.active;
       return item;
   }else{
       return item;
   }
});

console.log(listOne);
0 голосов
/ 26 апреля 2019

Я попытался и получил решение вопроса.Таким образом, нам нужно повторить два для , чтобы проверить все данные, как показано ниже.И нужно заменить по мере необходимости

for (const s of listOne) {
              for (const r of listTwo) {
                if (s.compId === r.compId) {
                  s.active = r.active;
                  break;
                }
              }
            }
  • Я уже упоминал ссылку, ответ которой доступен для AngularJS .но я ищу Angular 2+ Typescript.
0 голосов
/ 25 апреля 2019

Попробуйте,

// Iterate over list one
for(let item of this.listOne){
    // Check if the item exist in list two
    if(this.listTwo.find(i=>i.compId==item.compId)){
        // Update key
        item.active = this.listTwo.find(i=>i.compId==item.compId).active;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...