[英]Push Array in another Array by element Javascript
我有两个数组,第一个数组是由属性组成的文章数组,第二个数组由第一个数组的元素articles_id 组成,如果articles.id =,我想将第一个数组与new_array_articles_sub_categories 中的第二个数组合并= subcategories.article_id
articles = [
{
id: 1,
title: xxx,
description: desc1
},
{
id: 2,
title: yyy,
description: desc2
}
]
subcategories = [
{
id: 1,
name: xxx,
article_id: 1
},
{
id: 2,
name: yyy,
article_id: 1
}
]
new_array_articles_sub_categories = [
{
id: 1,
title: xxx,
description: desc1
subcategories: [
[0] : [
id: 1,
name: xxx,
]
[1] : [
id: 2,
name: yyy,
]
]
},
{
id: 2,
title: yyy,
description: desc2,
subcategories: []
}
]
我试试这个,但在 output 中结果不一样
var new_array_articles_sub_categories = []
for (var i = 0; i < articles.length; i++) {
for (var k = 0; k < subcategories.length; k++) {
if(articles[i].id == subcategories[k].article_id){
new_array_articles_sub_categories.push({
articles : articles[i],
subcategories : subcategories[k],
})
}
}
}
这是工作片段:
var articles = [{ id: 1, title: "xxx", description: "desc1" }, { id: 2, title: "yyy", description: "desc2" } ] var subcategories = [{ id: 1, name: "xxx", article_id: 1 }, { id: 2, name: "yyy", article_id: 1 } ] var new_array_articles_sub_categories = []; for (var i = 0; i < articles.length; i++) { var new_article = { id: articles[i].id, title: articles[i].title, description: articles[i].description, subcategories: [] }; new_array_articles_sub_categories.push(new_article); for (var ii = 0; ii < subcategories.length; ii++) { if (articles[i].id == subcategories[ii].article_id) { new_article.subcategories.push({ id: subcategories[ii].id, name: subcategories[ii].name }) } } } console.log(new_array_articles_sub_categories);
您可以使用 hash 表而不是嵌套循环。
这种方法只需要两个循环。
const articles = [{ id: 1, title: "xxx", description: "desc1" }, { id: 2, title: "yyy", description: "desc2" }], subcategories = [{ id: 1, name: "xxx", article_id: 1 }, { id: 2, name: "yyy", article_id: 1 }], subs = subcategories.reduce((r, o) => ((r[o.article_id]??= []).push(o), r), {}), result = articles.map(o => ({...o, subcategories: subs[o.id] || [] })); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.