JavaScript:比较对象数组和对象嵌套数组

JavaScript:比较对象数组和对象嵌套数组,javascript,arrays,array-filter,Javascript,Arrays,Array Filter,我想将上述条件下的var arrayB与var arrayA进行比较,因为arrayA[n].[m].id将与arrayB[ele].optionValue[e].id匹配 var arrayA=[ [{value:#0767b9,id:162,productId:1},value:#f4b7d4,id:164,productId:1], [{value:#44acd8”,id:102,productId:2}], [{value:#609923,id:106,productId:3},{val

我想将上述条件下的
var arrayB
var arrayA
进行比较,因为
arrayA[n].[m].id
将与
arrayB[ele].optionValue[e].id
匹配

var arrayA=[
[{value:#0767b9,id:162,productId:1},value:#f4b7d4,id:164,productId:1],
[{value:#44acd8”,id:102,productId:2}],
[{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3}]
]
var arrayB=[
{
id:1,
optionValue:[{value:#002e63',id:161,productId:1},{value:#0767b9',id:162,productId:1},{value:#010b1d',id:163,productId:1},{value:#f4b7d4',id:164,productId:1}]
},
{
id:2,
optionValue:[{value:#EC7063,id:93,productId:2},{value:#bf0000,id:94,productId:2},{value:#44acd8,id:102,productId:2},{value:#ffdbdb,id:103,productId:2}]
},
{
id:3,
optionValue:[{value:#d861bd,id:105,productId:3},{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3}]
},
{
id:4,
optionValue:[{value:#44acd8”,id:165,productId:4}]
}
]
我的目标是返回
var arrayB
,并使用过滤后的数据删除不在
var arrayA
中的对象,如下所示:

var结果=[
{
id:1,
optionValue:[{value:#0767b9,id:162,productId:1},{value:#f4b7d4,id:164,productId:1}]
},
{
id:2,
optionValue:[{value:#44acd8”,id:102,productId:2}]
},
{
id:3,
optionValue:[{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3}]
},
{
id:4,
optionValue:[{value:#44acd8”,id:165,productId:4}]
}
]
我有如下解决方法,但这并没有提供所需的输出

constmyarray=arrayB.map((el)=>{
el.optionValue.filter((fl)=>{
arrayA.map(值=>{
values.map((值)=>{
!value.id.includes(fl.id)
}) 
})
})
});
注意:对于结果集中的
id:4
,选择的productId没有任何值。因此,在arrayA中,
productId:4
没有值。因此,在这种情况下,如果没有用于比较的值,则应按原样返回,而不是返回空白数组。

可以使用以下方法进行尝试:

var arrayA=[
[{value:#0767b9,id:162,productId:1},{value:#f4b7d4,id:164,productId:1}],
[{value:#44acd8”,id:102,productId:2}],
[{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3}]
];
var arrayB=[
{
id:1,
optionValue:[{value:#002e63',id:161,productId:1}{
值:“0767b9”,
身份证号码:162,
产品编号:1
},{value:#010b1d,id:163,productId:1},{value:#f4b7d4,id:164,productId:1}]
},
{
id:2,
optionValue:[{value:#EC7063”,id:93,productId:2}{
值:“bf0000”,
id:94,
产品编号:2
},{value:#44acd8,id:102,productId:2},{value:#ffdbdb,id:103,productId:2}]
},
{
id:3,
optionValue:[{value:#d861bd',id:105,productId:3}{
值:“609923”,
id:106,
产品编号:3
},{值:#ee3b70,id:107,productId:3}]
},
{
id:4,
optionValue:[{value:#44acd8”,id:165,productId:4}]
}
];
让结果=[];
for(设i=0;i{
elemA.forEach(subElemA=>{
if(subElemA.id==arrayB[i].optionValue[j].id){
选择edelem.push(arrayB[i].optionValue[j]);
}
})
})
}
如果(selectedElem.length!==0){
arrayB[i].optionValue=selectedElem;
}
结果:push(arrayB[i]);
}

log('result::',JSON.stringify(result,null,2))
如果您只想从两者中获取公共标识符对,则可以收集标识符并映射
arrayB
的filterd数组

这种方法对于每个数组只需要一个循环

const
arrayA=[{value:#0767b9,id:162,productId:1},{value:#f4b7d4,id:164,productId:1}],{value:#44acd8,id:102,productId:2},{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3}]],
arrayB={{id:1,选项值:{{{{{id:1,1.5万元元元元元元元元元阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列={{id:1,选项值:{{id:1,1.1元元元音:1,3.1元音:{{id:1},{值:{值:{7.7.6767B9,id:0767b9,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,{{{{{{id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1,id:1",id:102,productId:2},{value:#ffdbdb,id:103,productId:2},{id:3,optionValue:[{value:#d861bd,id:105,productId:3},{value:#609923,id:106,productId:3},{value:#ee3b70,id:107,productId:3},{id:4,optionValue:[{value:#id:#value:#id:165,productId:4},
标识符=arrayA.reduce((r,a)=>{
a、 forEach({id,productId})=>(r[productId]=r[productId]|{}[id]=true);
返回r;
}, {}),
result=arrayB.map(o=>identifiers[o.id]
?{…o,optionValue:o.optionValue.filter(({id,productId})=>标识符[productId][id])
:o
);
控制台日志(结果)

作为控制台包装{max height:100%!important;top:0;}
为什么结果集中有
id:4
?这是所选的productId,没有选择任何值。因此在
arrayA
中,
productId:4
没有值。。。所以