[英]How to remove duplicates with extra keys from an array
我有两个 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: "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;
})
但是由于我无法访问内部映射返回值,所以我得到了原始数组。 我这样做的一种方法是连接两个 arrays 并通过使用javascript的reduce方法检查架子名称来使用reduce数组。 有人可以用更好的方法帮助我。
我会 go 首先为“a2”创建一个辅助 object,当我在a1
上循环时,在每个循环中我会检查辅助 ZA8CFDE6331BD59EB2666F8911ZC4 中是否存在当前密钥。
拥有辅助 Object 可以为您节省不必要的循环,您只需遍历 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: "current"}}]; const dict = a2.reduce((acc, ob) => { const [k, v] = Object.entries(ob)[0]; acc[k] = v; return acc; }, {}); const newA1 = a1.map((ob) => { const [k, v] = Object.entries(ob)[0]; if (dict[k]) { Object.assign(v, dict[k]); } return {[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 数组的元素被修改了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.