Javascript 将值推入对象
我有以下几点Javascript 将值推入对象,javascript,Javascript,我有以下几点 const post = [ { postTitle: 'Title1', key: 'key1' }, { postTitle: 'Title2', key: 'key2' } ]; const comment = [ { key: 'key1', c: 'comment1' }, { key: 'key1', c: 'comment2' }, { key: 'key2', c: 'commentA' }, { key: 'key
const post = [
{ postTitle: 'Title1', key: 'key1' },
{ postTitle: 'Title2', key: 'key2' }
];
const comment = [
{ key: 'key1', c: 'comment1' },
{ key: 'key1', c: 'comment2' },
{ key: 'key2', c: 'commentA' },
{ key: 'key2', c: 'commentB' },
{ key: 'key2', c: 'commentC' }
];
我想得到以下结果:
const newPost = [
{
postTitle: 'Title1',
key: 'key1',
comment: ['comment1', 'comment2']
},
{
postTitle: 'Title2',
key: 'key2',
comment: ['commentA', 'commentB', 'commentC']
}
];
下面的代码似乎几乎可以完成这项工作,但它正在覆盖我的注释。我只得到每个postTitle
的最后一条评论。我如何修复代码或改进代码以获得与上述结果完全相同的结果
以下是相关代码:
for (var i = 0; i < post.length; ++i) {
for (var j = 0; j < comment.length; j++) {
if (post[i].key === comment[j].key) {
post[i].comment = [];
post[i].comment.push([comment[j].c]);
} else {
console.log('no comment to add');
}
}
}
for(变量i=0;i
另外,如果有更优雅的重构代码,请在这里分享。谢谢。您就快到了,我在代码中添加了注释来解释出现了什么问题
post=[
{postTitle:'Title1',key:'key1'},
{postTitle:'Title2',key:'key2'}
];
评论=[
{key:'key1',c:'comment1},
{key:'key1',c:'comment2'},
{key:'key2',c:'commentA},
{key:'key2',c:'commentB'},
{key:'key2',c:'commentC}
];
对于(变量i=0;i log('comment:',comment)代码>您就快到了,我已经在代码中添加了注释来解释出现了什么问题
post=[
{postTitle:'Title1',key:'key1'},
{postTitle:'Title2',key:'key2'}
];
评论=[
{key:'key1',c:'comment1},
{key:'key1',c:'comment2'},
{key:'key2',c:'commentA},
{key:'key2',c:'commentB'},
{key:'key2',c:'commentC}
];
对于(变量i=0;i您可以使用和函数来获得所需的结果
请尝试以下示例
const post=[
{postTitle:'Title1',key:'key1'},
{postTitle:'Title2',key:'key2'}
];
常量注释=[
{key:'key1',c:'comment1'},
{key:'key1',c:'comment2'},
{key:'key2',c:'commentA'},
{key:'key2',c:'commentB'},
{key:'key2',c:'commentC'}
];
常数newPost=[
{
标题:“标题1”,
键:“键1”,
评论:['comment1','comment2']
},
{
题为“标题2”,
键:“键2”,
注释:['commentA','commentB','commentC']
}
];
const result=post.map(p=>{
const obj=Object.assign({},p);
obj.comment=comment.filter(c=>c.key==p.key).map(c=>c.c);
返回obj;
});
控制台日志(结果)代码>您可以使用和函数来获得所需的结果
请尝试以下示例
const post=[
{postTitle:'Title1',key:'key1'},
{postTitle:'Title2',key:'key2'}
];
常量注释=[
{key:'key1',c:'comment1'},
{key:'key1',c:'comment2'},
{key:'key2',c:'commentA'},
{key:'key2',c:'commentB'},
{key:'key2',c:'commentC'}
];
常数newPost=[
{
标题:“标题1”,
键:“键1”,
评论:['comment1','comment2']
},
{
题为“标题2”,
键:“键2”,
注释:['commentA','commentB','commentC']
}
];
const result=post.map(p=>{
const obj=Object.assign({},p);
obj.comment=comment.filter(c=>c.key==p.key).map(c=>c.c);
返回obj;
});
控制台日志(结果)代码>问题
正如您所指出的,代码的问题在于您正在覆盖注释数组。问题在于:
post[i].comment = [];
仅当数组尚不存在时才执行上述行,而不是每次执行
用简单的条件检查替换上面的行可以:
if (!post[i].comment) post[i].comment = [];
constpost=[{postTitle:'Title1',key:'key1'},{postTitle:'Title2',key:'key2'}];
const comment=[{key:'key1',c:'comment1},{key:'key1',c:'comment2},{key:'key2',c:'commentA},{key:'key2',c:'commentB},{key:'key2',c:'commentC}];
对于(变量i=0;i 控制台日志(post)代码>问题
正如您所指出的,代码的问题在于您正在覆盖注释数组。问题在于:
post[i].comment = [];
仅当数组尚不存在时才执行上述行,而不是每次执行
用简单的条件检查替换上面的行可以:
if (!post[i].comment) post[i].comment = [];
constpost=[{postTitle:'Title1',key:'key1'},{postTitle:'Title2',key:'key2'}];
const comment=[{key:'key1',c:'comment1},{key:'key1',c:'comment2},{key:'key2',c:'commentA},{key:'key2',c:'commentB},{key:'key2',c:'commentC}];
对于(变量i=0;i