Javascript 通过_id匹配并提取两个对象数组之间的元素

Javascript 通过_id匹配并提取两个对象数组之间的元素,javascript,arrays,Javascript,Arrays,我有两个阵列: 阵列一: 数组二: 如您所见,数组2中索引1处元素的每个值_id与数组1中的每个值_id匹配 如果所有元素的值与数组1匹配,如何迭代数组2并提取_id 我尝试过很多方法,但似乎都不管用,例如: const opts = newTempProduct.variants.map((item) => item.options); const props = ['_id']; const result = opts .filter((o1, i)

我有两个阵列:

阵列一:

数组二:

如您所见,数组2中索引1处元素的每个值_id与数组1中的每个值_id匹配

如果所有元素的值与数组1匹配,如何迭代数组2并提取_id

我尝试过很多方法,但似乎都不管用,例如:

    const opts = newTempProduct.variants.map((item) => item.options);
    const props = ['_id'];
    const result = opts
      .filter((o1, i) => {
        o1.filter((o3) => {
          return tmpVariant.some((o2) => {
            return o3.value._id === o2.value._id;
          });
        });
      })
      .map(function(o) {
        return props.reduce((newo, name) => {
          newo[name] = o[name];
          return newo;
        }, {});
      });


您可以创建一个名为search的附加数组。此数组是第一个数组的映射版本,仅包含_id属性。为了提高效率,可以将此数组设置为集合,以便进行O1查找。然后,如果给定对象的选项数组中的所有ID都在搜索数组中,则可以使用.every with.filter返回true。这将为您提供生成的id:

const arr=[{value:{id:5ce3f8cc35ad1e0999ee18d1,is_默认值:false,is_必需:true,排序顺序:0,值:,标签:No 38,选项{id:5ce3f8cc35ad1e0999ee18d0,{v:0,selected:true},{value:{label:tικκ959;λορρρρ,排序顺序:0,值:7a3131 1240e8e76},id:edd49,selected:true},selected:b455d4e407e},selected:{label:Χ∧,排序顺序:0,值:,_id:5df37c50854df50b274d7829,selected:true}}]; 常量数据=[{u id:5df384edba99411550e4e019,选项:[{option:{sort_order:0,display_name:ΜέγεθοEU,type:text,display_style:dropdown},值:{u id:5ce3f8cc35ad1e0999ee18d1,默认值:false,是否需要:true,排序顺序:0,值:,标签号:38,选项{id:e3ce3f8cc35ad9eed0,}{显示名称:样本,显示样式:样本,排序顺序:0,类型:样本},值:{标签:ρικολορ,排序顺序:0,值:7a3131 | 0e8e76 | b6edd9,id:3aa5b2d7-cb78-44ce-bb5d-E4D42EBF309},{选项:{显示名称:下拉列表,显示样式:下拉,排序顺序:0,类型:多重值}{u id:5df37c61854df50b274d782a,is_默认值:false,is_必需值:true,label:∧,sort_order:0,value:,value_data:null}]},{u id:5ce3f8cc35ad1e0999ee18d1,选项:[{选项:{sort_order:0,显示名称:έγεθ959; EU EU EU EU EU,类型:文本,显示样式:下拉列表},值:{u id:5ce3f8cc35ad1e0999ee18d1,默认值:false,必需值:true,排序顺序:0,值:,标签:No 38,选项\u id:5ce3f8cc35ad1e0999ee18d0,{u v:0},{选项:{显示名称:样本,显示样式:样本,排序顺序:0,类型:样本},值:{label:tρkκkλορ,排序顺序:0,值:7a3131,0e8e76,b6edd9,id:3aa5b2d7-cb78-44ce-bb5d-e4d42ebf3309},{选项:{显示名称:下拉,显示样式:下拉,排序顺序:0,类型:MultipleChiice},值:{label:; const search=new Setarr.map{value:{{u id}}=>u id; const res=data.filter {options}=>options.every{value:{{u id}}=>search.has_id .map{{u id}=>\u id;//使用`.filter`以防许多对象与第一个数组匹配 console.logres;//匹配的所有_id的数组
console.logres.pop;//你的预期/想要的结果你能给出一个预期结果的例子吗?嗨,尼克,谢谢你的评论,我只想要第二个数组中的_id,在这个例子中是5ce3f8cc35ad1e0999ee18d1。不过如果我能用这个_id得到整个对象,没关系。谢谢你的回答,我无法摆脱selected:true,它是为oth准备的er应用程序中其他地方需要的原因。真相的来源只是每个值的_id。我几乎尝试过删除所选属性的方法,但后来发现它是必需的……我将尝试此方法并返回。@StathisNtonas Hi,我对我的答案进行了一些修改,以便只查看_id属性
[
  {
    "_id": "5df384edba99411550e4e019",
    "options": [
      {
        "option": {
          "sort_order": 0,
          "display_name": "Μέγεθος (EU)",
          "type": "text",
          "display_style": "dropdown"
        },
        "value": {
          "_id": "5ce3f8cc35ad1e0999ee18d1",
          "is_default": false,
          "is_required": true,
          "sort_order": 0,
          "value": "",
          "label": "No 38",
          "option_id": "5ce3f8cc35ad1e0999ee18d0",
          "__v": 0
        }
      },
      {
        "option": {
          "display_name": "swatch",
          "display_style": "swatch",
          "sort_order": 0,
          "type": "swatch"
        },
        "value": {
          "label": "Τρικολορ",
          "sort_order": 0,
          "value": "#7a3131|#0e8e76|#b6edd9",
          "_id": "3aa5b2d7-cb78-44ce-bb5d-e4d42ebf3309"
        }
      },
      {
        "option": {
          "display_name": "dropdown",
          "display_style": "dropdown",
          "sort_order": 0,
          "type": "multiplechoice"
        },
        "value": {
          "_id": "5df37c61854df50b274d782a",
          "is_default": false,
          "is_required": true,
          "label": "Λ",
          "sort_order": 0,
          "value": "",
          "value_data": null
        }
      }
    ]
  },
  {
    "_id": "5ce3f8cc35ad1e0999ee18d1",
    "options": [
      {
        "option": {
          "sort_order": 0,
          "display_name": "Μέγεθος (EU)",
          "type": "text",
          "display_style": "dropdown"
        },
        "value": {
          "_id": "5ce3f8cc35ad1e0999ee18d1",
          "is_default": false,
          "is_required": true,
          "sort_order": 0,
          "value": "",
          "label": "No 38",
          "option_id": "5ce3f8cc35ad1e0999ee18d0",
          "__v": 0
        }
      },
      {
        "option": {
          "display_name": "swatch",
          "display_style": "swatch",
          "sort_order": 0,
          "type": "swatch"
        },
        "value": {
          "label": "Τρικολορ",
          "sort_order": 0,
          "value": "#7a3131|#0e8e76|#b6edd9",
          "_id": "3aa5b2d7-cb78-44ce-bb5d-e4d42ebf3309"
        }
      },
      {
        "option": {
          "display_name": "dropdown",
          "display_style": "dropdown",
          "sort_order": 0,
          "type": "multiplechoice"
        },
        "value": {
          "label": "ΧΛ",
          "sort_order": 0,
          "value": "",
          "_id": "5df37c50854df50b274d7829"
        }
      }
    ]
  }
]

    const opts = newTempProduct.variants.map((item) => item.options);
    const props = ['_id'];
    const result = opts
      .filter((o1, i) => {
        o1.filter((o3) => {
          return tmpVariant.some((o2) => {
            return o3.value._id === o2.value._id;
          });
        });
      })
      .map(function(o) {
        return props.reduce((newo, name) => {
          newo[name] = o[name];
          return newo;
        }, {});
      });