сравнить с массивами объектов и обновить ключ в угловых 6 машинописи

-2
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, }, ]

  • 0
    использовать listOne.forEach...
  • 0
    Вы пытались реализовать это похоже на связанный вопрос? for циклов и методов-прототипов массивов работают одинаково в машинописи
Показать ещё 2 комментария
Теги:
angular
angular6

3 ответа

0

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

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

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

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

Попробуй это,

// 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;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню