如何从Typescript中具有相同json对象结构的另一个数组更新数组中的json对象值
我正在使用Typescript处理angular项目,我有以下数组1:如何从Typescript中具有相同json对象结构的另一个数组更新数组中的json对象值,typescript,Typescript,我正在使用Typescript处理angular项目,我有以下数组1: array1: any = [ { 'garantie': 'A', 'checked': false }, { 'garantie': 'B', 'checked': false }, { 'garantie': 'C', 'check
array1: any = [
{
'garantie': 'A',
'checked': false
},
{
'garantie': 'B',
'checked': false
},
{
'garantie': 'C',
'checked': false
},
{
'garantie': 'D',
'checked': false
},
{
'garantie': 'E',
'checked': false
},
{
'garantie': 'F',
'checked': false
}
];
我还有另一个数组,它包含相同的json对象结构,代码如下:
array2: any = [
{
'garantie': 'A',
'checked': true
},
{
'garantie': 'D',
'checked': true
},
{
'garantie': 'F',
'checked': true
}
];
我的问题是,我想根据担保属性更新第二个数组的checked属性,这是我想要的结果:
[
{
'garantie': 'A',
'checked': true
},
{
'garantie': 'B',
'checked': false
},
{
'garantie': 'C',
'checked': false
},
{
'garantie': 'D',
'checked': true
},
{
'garantie': 'E',
'checked': false
},
{
'garantie': 'F',
'checked': true
}
];
我尝试了此代码,但不起作用:
for (let i = 0; i < 6; i++) {
if (this.array1[i] !== undefined && this.array2[i] !== undefined) {
if (this.array1[i].garantie === this.array2[i].garantie) {
this.array1[i].checked = this.array2[i].checked;
}
}
}
for(设i=0;i<6;i++){
if(this.array1[i]!==未定义&&this.array2[i]!==未定义){
if(this.array1[i].garantie==this.array2[i].garantie){
this.array1[i].checked=this.array2[i].checked;
}
}
}
请问您对如何实现这一目标有何建议
提前感谢。您可以通过简单的映射操作和嵌套的查找操作来完成此操作
array1=array1.map(i=>{
返回{
加兰蒂:我,加兰蒂,
选中:(array2.find(k=>k.garantie==i.garantie)| | i)。选中
}
});
array.map
获取一个输入数组,并根据某些条件转换每个元素。
array.find
根据某些条件在数组中查找匹配元素
对于array1中的每个元素,保持garantie,如果在array2中找到匹配的元素,则选中update,否则保持选中当前元素
下面是上面关于您的输入JSON的操作。
var数组1=[
{
“garantie”:“A”,
“选中”:false
},
{
“garantie”:“B”,
“选中”:false
},
{
“garantie”:“C”,
“选中”:false
},
{
“garantie”:“D”,
“选中”:false
},
{
“garantie”:“E”,
“选中”:false
},
{
“garantie”:“F”,
“选中”:false
}
];
变量array2=[
{
“garantie”:“A”,
“选中”:true
},
{
“garantie”:“D”,
“选中”:true
},
{
“garantie”:“F”,
“选中”:true
}
];
array1=array1.map(i=>{
返回{
加兰蒂:我,加兰蒂,
选中:(array2.find(k=>k.garantie==i.garantie)| | i)。选中
}
});
控制台日志(array1)代码>您可以通过简单的映射操作和嵌套的查找操作来完成此操作
array1=array1.map(i=>{
返回{
加兰蒂:我,加兰蒂,
选中:(array2.find(k=>k.garantie==i.garantie)| | i)。选中
}
});
array.map
获取一个输入数组,并根据某些条件转换每个元素。
array.find
根据某些条件在数组中查找匹配元素
对于array1中的每个元素,保持garantie,如果在array2中找到匹配的元素,则选中update,否则保持选中当前元素
下面是上面关于您的输入JSON的操作。
var数组1=[
{
“garantie”:“A”,
“选中”:false
},
{
“garantie”:“B”,
“选中”:false
},
{
“garantie”:“C”,
“选中”:false
},
{
“garantie”:“D”,
“选中”:false
},
{
“garantie”:“E”,
“选中”:false
},
{
“garantie”:“F”,
“选中”:false
}
];
变量array2=[
{
“garantie”:“A”,
“选中”:true
},
{
“garantie”:“D”,
“选中”:true
},
{
“garantie”:“F”,
“选中”:true
}
];
array1=array1.map(i=>{
返回{
加兰蒂:我,加兰蒂,
选中:(array2.find(k=>k.garantie==i.garantie)| | i)。选中
}
});
控制台日志(array1)代码>当前循环正在同一索引处比较两个数组-虽然它适用于A
,但不适用于第二个索引,依此类推。您应该尝试在第二个数组中进行查找
,以从第一个数组中查找匹配的元素。如果找到匹配项,则更新。另外,不要硬编码循环计数器,使用array1.length
@tymeJV谢谢你的回答,你知道如何在typeScipt中找到匹配元素的语法吗?让matchingObj=array2.find(a=>a.garantie==array1[i].garantie);如果(matchingObj){do stuff}
您当前的循环在同一个索引中比较两个数组,那么这对A
有效,但对第二个索引无效,依此类推。您应该尝试在第二个数组中进行查找
,以从第一个数组中查找匹配的元素。如果找到匹配项,则更新。另外,不要硬编码循环计数器,使用array1.length
@tymeJV谢谢你的回答,你知道如何在typeScipt中找到匹配元素的语法吗?让matchingObj=array2.find(a=>a.garantie==array1[i].garantie);if(matchingObj){do stuff}