按元素 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);