按元素 Javascript 将数组推入另一个数组
Push Array in another Array by element Javascript
我有两个数组,第一个数组是由属性组成的文章数组,第二个数组由第一个数组的元素 articles_id 组成,我想将第一个数组与new_array_articles_sub_categories 中的第二个数组 if articles.id == 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: []
}
]
我试过这个,但输出结果不一样
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],
})
}
}
}
您可以采用散列 table 而不是嵌套循环。
这种方法只需要两个循环。
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; }
这是工作片段:
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);
我有两个数组,第一个数组是由属性组成的文章数组,第二个数组由第一个数组的元素 articles_id 组成,我想将第一个数组与new_array_articles_sub_categories 中的第二个数组 if articles.id == 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: []
}
]
我试过这个,但输出结果不一样
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],
})
}
}
}
您可以采用散列 table 而不是嵌套循环。
这种方法只需要两个循环。
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; }
这是工作片段:
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);