Javascript 如何从数组中删除具有额外键的重复项
我有两个阵列:Javascript 如何从数组中删除具有额外键的重复项,javascript,arrays,Javascript,Arrays,我有两个阵列: const a1=[ { a:{ name: "first" } }, { b:{ name: "second" } }, { c:{ name: "third" } }, { d:{ name: "fourth" } } ] const a2=[ { a:{ name: "first", shelf: "read" } }, { b:{ name: "second", shelf: "
const a1=[
{
a:{ name: "first" }
},
{
b:{ name: "second" }
},
{
c:{ name: "third" }
},
{
d:{ name: "fourth" }
}
]
const a2=[
{
a:{ name: "first", shelf: "read" }
},
{
b:{ name: "second", shelf: "current" }
}
]
我需要检查a1的内容是否在a2中,如果它存在,则在a1中替换它(基本上a1中缺少工具架名称。我需要在a1中更新该名称)
我的最终结果应该是:
[
{
a:{ name: "first", shelf: "read" }
},
{
b:{ name: "second", shelf: "current" }
}
{
c:{ name: "third" }
},
{
d:{ name: "fourth" }
}
]
我试过类似的东西
const x = a1.map( ele => {
a2.map( e => {
if( e.name === ele.name ) return ele
else return ({ ...ele, shelf: 'none' })
})
return ele;
})
但是由于我没有访问内部映射返回值的权限,所以我得到了原始数组。我想到的一种方法是连接两个数组,并通过使用javascript的reduce方法检查shelf名称来使用reduce数组。有人能帮我找到更好的方法吗。我会先为“a2”创建一个辅助对象,当我在
a1
上循环时,我会在每个循环中检查辅助对象中是否存在当前键
让辅助对象保存不必要的循环,只需遍历两个数组一次
const a1=[{a:{name:“first”},{b:{name:“second”},{c:{name:“third”},{d:{name:“fourth”}];
常量a2=[{a:{name:“first”,shelf:“read”},{b:{name:“second”,shelf:“current”}];
常数dict=a2.reduce((acc,ob)=>{
常数[k,v]=对象项(ob)[0];
acc[k]=v;
返回acc;
}, {});
常数newA1=a1.map((ob)=>{
常数[k,v]=对象项(ob)[0];
if(dict[k]){
赋值(v,dict[k]);
}
返回{[k]:v};
});
console.log(newA1)
这应该以简洁的方式完成工作:
a1.map((it)=> {
const key = Object.keys(it)[0];
const a2item = a2.find( (it2) => Object.keys(it2)[0]===key );
if(a2item) {
Object.assign(it[key], a2item[key]);
}
return it;
});
请注意,原始a1阵列的元素已被修改。到目前为止,您到底尝试了什么?我们很高兴看到你的尝试。你到底被困在哪里了?@JeremyThille我已经更新了我的问题,但我还没有取得多大进展