首页 > 解决方案 > 如何在angular6中合并数组值相同的id对象?

问题描述

在这里,我收到了我的 Angular 项目的回复

const testArray = [
{PackageID: 7, FormsList: [{Form_Name: "string One"}]}
{PackageID: 7, FormsList: [{Form_Name: "string Two"}]}
{PackageID: 7, FormsList: [{Form_Name: "string Three"}]}

{PackageID: 11, FormsList: [{Form_Name: "string One"}]}
{PackageID: 11, FormsList: [{Form_Name: "string One"}]}
{PackageID: 11, FormsList: [{Form_Name: "string One"}]}]

获得此数组后,我想与以下相同 ID 中的 FormsList 数组合并

const testArray = [
{PackageID: 7, FormsList: [{Form_Name: "string One"}, {Form_Name: "string Two"}, {Form_Name: "string Three"}]}  
{PackageID: 11, FormsList:  [{Form_Name: "string One"}, {Form_Name: "string Two"}, {Form_Name: "string Three"}]}]

和合并后如何删除特定的 FormList>Form_Name 选定对象。

例如,我得到这样的删除值

const deleteArray = [{PackageID: 7, FormsList: [{Form_Name: "string Two"}]}]

测试数组结果没有第二个对象,如下面的代码

const testArray = [{PackageID: 7, FormsList: [{Form_Name: "string One"}, {Form_Name: "string Three"}]}, {PackageID: 11, FormsList:  [{Form_Name: "string One"}, {Form_Name: "string Two"}, {Form_Name: "string Three"}]}]

请帮助解决这个问题。

更新截图 在此处输入图像描述

标签: arraysjsonangularfilter

解决方案


那么,让我们开始吧!我们应该做的第一件事是创建一个列表PackageID's

const ids = testArray.map(item => item.PackageID)

然后让我们从这个数组中获取唯一值。为此,我们需要分两步

  1. 创建一个函数distinct
const distinct = (value, index, self) => {
    return self.indexOf(value) === index
}
  1. 创建 uniq id 的列表
const uniqIds = ids.filter(distinct)

现在我们可以合并testArray

const res = uniqIds.map(id => {
    let tmp = []
    const arr = testArray.filter(item => item.PackageID === id)

    arr.forEach(item => {
        tmp.push(...item.FormsList)
    })

    return { PackageID: id, FormsList: tmp }
})

我希望它会帮助你


推荐阅读