Javascript 在对象之间合并数据,匹配键值
这是一个数据样本Javascript 在对象之间合并数据,匹配键值,javascript,Javascript,这是一个数据样本 featuredPosts = [ { 'order': 1, 'id': 23 }, { 'order': 2, 'id': 12 }, ] 这是更复杂的数据 allPosts = [ { 'id': 12, 'title': '...', 'content': '...' }, { 'id': 13, 'title': '...', 'content': '...' }, ... { 'id': 23, 'title': '...', 'cont
featuredPosts = [
{ 'order': 1, 'id': 23 },
{ 'order': 2, 'id': 12 },
]
这是更复杂的数据
allPosts = [
{ 'id': 12, 'title': '...', 'content': '...' },
{ 'id': 13, 'title': '...', 'content': '...' },
...
{ 'id': 23, 'title': '...', 'content': '...' },
...
]
是否有一种方法可以将所有帖子中的数据合并到featuredPosts中,只针对已经存在于特色帖子中的id,而不通过特色帖子和所有帖子的键进行循环?我的意思是有更聪明的方法吗?您可以使用
reduce
方法,方法是将回调函数作为参数
与对象.赋值
方法相结合
featuredPosts=[
{'order':1,'id':23},
{'order':2,'id':12},
]
所有职位=[
{'id':12,'title':'…','content':'…'},
{'id':13,'title':'…','content':'…'},
{'id':23,'title':'…','content':'…'}
]
var merged=featuredPosts.concat(allPosts.reduce)(acc,x)=>{
acc[x.id]=Object.assign(acc[x.id]|{},x);
返回acc;
}, {});
log(Object.keys(merged.map)(key=>merged[key])代码>只需建立一个哈希表(id->featuredPost):
然后浏览所有帖子并在哈希表中查找:
for(const post of allPosts)
if(hash[post.id]) Object.assign(hash[post.id], post);
现在featuredPosts
包含合并的数据。Hi!引用的结构无效,如图所示。featuredPosts
和allPosts
是数组吗?如果没有,它们是什么?分别:请拿着这本书,通读一下,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运我们的解决方案对你有用吗?
for(const post of allPosts)
if(hash[post.id]) Object.assign(hash[post.id], post);