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;ilog('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