Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Typescript中具有相同json对象结构的另一个数组更新数组中的json对象值_Typescript - Fatal编程技术网

如何从Typescript中具有相同json对象结构的另一个数组更新数组中的json对象值

如何从Typescript中具有相同json对象结构的另一个数组更新数组中的json对象值,typescript,Typescript,我正在使用Typescript处理angular项目,我有以下数组1: array1: any = [ { 'garantie': 'A', 'checked': false }, { 'garantie': 'B', 'checked': false }, { 'garantie': 'C', 'check

我正在使用Typescript处理angular项目,我有以下数组1:

 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}