【问题标题】:Push Array in another Array by element Javascript按元素Javascript将数组推入另一个数组
【发布时间】:2025-12-20 02:10:12
【问题描述】:

我有两个数组,第一个数组是由属性组成的文章数组,第二个数组由第一个数组的元素 items_id 组成,如果文章,我想将第一个数组与 new_array_articles_sub_categories 中的第二个数组合并.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],
            })
        }
    }
}

【问题讨论】:

    标签: javascript arrays arraylist collections


    【解决方案1】:

    这里正在运行 sn-p:

    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);

    【讨论】:

      【解决方案2】:

      您可以使用哈希表而不是嵌套循环。

      这种方法只需要两个循环。

      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; }

      【讨论】:

        最近更新 更多