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, }, ]
Я попытался и получил решение вопроса. Таким образом, нам нужно повторить два для проверки всех данных, как показано ниже. И нужно заменить как нужно
for (const s of listOne) {
for (const r of listTwo) {
if (s.compId === r.compId) {
s.active = r.active;
break;
}
}
}
Вы можете использовать карту и фильтр, как это
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);
Попробуй это,
// 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;
}
}
listOne.forEach...
for
циклов и методов-прототипов массивов работают одинаково в машинописи