Javascript 通过_id匹配并提取两个对象数组之间的元素
我有两个阵列: 阵列一: 数组二: 如您所见,数组2中索引1处元素的每个值_id与数组1中的每个值_id匹配 如果所有元素的值与数组1匹配,如何迭代数组2并提取_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)
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;
}, {});
});