Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象之间合并数据,匹配键值_Javascript - Fatal编程技术网

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);