Javascript 将值从一个对象匹配到另一个对象

Javascript 将值从一个对象匹配到另一个对象,javascript,arrays,json,for-loop,key-value,Javascript,Arrays,Json,For Loop,Key Value,我有两个对象数组: [ 0:{key1:value1,key2:value2,key3:value3}, 1:{key1:value1,key2:value2,key3:value3} ] [ 0:{stop_id:173,file_id:“1”,key_type:null,key_value:“0020”,seg_beg:32}, 1:{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10}, 2:{stop_i

我有两个对象数组:

[
0:{key1:value1,key2:value2,key3:value3},
1:{key1:value1,key2:value2,key3:value3}
]
[  
0:{stop_id:173,file_id:“1”,key_type:null,key_value:“0020”,seg_beg:32},
1:{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10},
2:{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10}
]
我需要检查第一个对象中的任何键的值是否与第二个对象中的键值…键的任何值相匹配,然后在匹配的记录中设置一个变量,直到停止id值。像这样:

if(object1.value==object2.key\u值){
match=object2[iterator]。停止\u id;
}
为了简化此过程,我尝试只获取第一个对象的值:

//pd.segs是对象1
设pdSegValues=[];

对于(设i=0;i),可以通过收集要测试的值,然后使用

让arr1=[
{“a1”:“value1”,“b1”:“value2”},
{“a2”:“0020”,“b2”:“value22”},
{“a3”:“value111”,“b3”:“0201”}
];
设arr2=[
{stop_id:173,file_id:“1”,key_type:null,key_value:“0020”,seg_beg:32},
{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10},
{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10}
];
//将唯一的arr1值累积到数组中
让arr1Values=Array.from(arr1.reduce)(acc,curr)=>{
Object.values(curr.forEach)(v=>acc.add(v));
返回acc;
},新集合());
//累积所有唯一arr2“键值”
让arr2KeyValues=arr2.reduce((acc,curr)=>{
acc.add(当前键值);
返回acc;
},新集合());
console.log(arr1value);
log(Array.from(arr2KeyValues));
//测试第一个数组中的对象中是否存在任何值
//等于第二个数组中的任意键_值

log(arr1Values.some(k=>arr2KeyValues.has(k));
您可以通过收集要测试的值,然后使用

让arr1=[
{“a1”:“value1”,“b1”:“value2”},
{“a2”:“0020”,“b2”:“value22”},
{“a3”:“value111”,“b3”:“0201”}
];
设arr2=[
{stop_id:173,file_id:“1”,key_type:null,key_value:“0020”,seg_beg:32},
{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10},
{stop_id:176,file_id:“1”,key_type:null,key_value:“0201”,seg_beg:10}
];
//将唯一的arr1值累积到数组中
让arr1Values=Array.from(arr1.reduce)(acc,curr)=>{
Object.values(curr.forEach)(v=>acc.add(v));
返回acc;
},新集合());
//累积所有唯一arr2“键值”
让arr2KeyValues=arr2.reduce((acc,curr)=>{
acc.add(当前键值);
返回acc;
},新集合());
console.log(arr1value);
log(Array.from(arr2KeyValues));
//测试第一个数组中的对象中是否存在任何值
//等于第二个数组中的任意键_值

console.log(arr1Values.some(k=>arr2KeyValues.has(k));
看起来您必须将一个数组中的每个对象与另一个数组中的每个对象的键进行比较。初始蛮力方法有3个嵌套for循环:

// Loop through the objects in the first array
for (const objectA of arrayA) {

  // Loop through that object's keys
  for (const key in objectA) {

    // Loop through the objects in the second array
    for (const objectB of arrayB) {

      if (objectA[key] === objectB.key_value) {
        // do all the stuff
      }
    }
  }
}

看起来您必须将一个数组中的每个对象与另一个数组中的每个对象的键进行比较。初始蛮力方法有3个嵌套for循环:

// Loop through the objects in the first array
for (const objectA of arrayA) {

  // Loop through that object's keys
  for (const key in objectA) {

    // Loop through the objects in the second array
    for (const objectB of arrayB) {

      if (objectA[key] === objectB.key_value) {
        // do all the stuff
      }
    }
  }
}

下面是我最后做的,只是为了留下一个记录:)

然后我所要做的就是展平生成的对象数组,我得到了我需要的结果,然后我可以循环使用这些结果来达到最初的目的


谢谢大家的宝贵意见。我在这里学到了不少:)

以下是我最后做的事情,只是为了留下一个记录:)

然后我所要做的就是展平生成的对象数组,我得到了我需要的结果,然后我可以循环使用这些结果来达到最初的目的


谢谢大家的宝贵意见。我在这里学到了很多:)

然后做一些事情
这可能很重要-您需要对匹配的对象做些什么,还是只需要知道匹配是否存在?第一个结果是简单的代码,第二个结果是非常复杂的代码。我需要将一个变量进一步设置为匹配记录的stop_id值,并相应地编辑问题:)是否只需要一个yes/no布尔值来判断匹配是否存在?@mark meyer,不,我需要设置一个更高的变量,直到匹配记录的stop_id值。查看上面编辑的问题
,然后执行一些操作
这可能很重要-您需要对匹配的对象执行一些操作,还是只需要知道是否存在匹配?第一个结果是简单的代码,第二个结果是非常复杂的代码。我需要将一个变量进一步设置为匹配记录的stop_id值,并相应地编辑问题:)是否只需要一个yes/no布尔值来判断匹配是否存在?@mark meyer,不,我需要设置一个更高的变量,直到匹配记录的stop_id值。请看上面编辑的问题,这正是我所担心的,尽管在你的回答中有一些事情我没有想到。我会给他们拍一张照片,这正是我所担心的,尽管在你的回答中有一些事情我没有想到。我会给他们一张照片这很有趣,我会测试一下,然后回来这是一个非常好的解决方案,比我尝试过的任何方法都要简洁。非常感谢。这很有趣,我会测试一下,然后回来这是一个非常好的解决方案,比我尝试过的任何方法都要简洁。非常感谢。