在TypeScript中过滤嵌套数组对象的数组

5

我有些困难来过滤嵌套数组数据集。例如,我有以下数据数组列表:

let list = [
{
  "percentage": 50.0,
  "budget": "online",
  "ruleName": "C1"
},
{
  "percentage": 50.0,
  "budget": "offline",
  "ruleName": "C1"
},
{
  "percentage": 50.0,
  "budget": "other",
  "ruleName": "C4"
}

现在我想使用 .map.filter 来实现以下结果,并考虑如果 父数组子组数组 的 budget 属性匹配,则应仅返回匹配的 对象,而不是所有对象。
[
  {
    "budget": "online",
    "ruleName": "C1",
    "group": [
        {
            "budget": "onlne",
            "percentage": 50.0
        }
    ]
  },

  {
    "budget": "offline",
    "ruleName": "C1",
    "group": [
        {
            "budget": "offline",
            "percentage": 50.0
        }
    ]
  },

  {
    "budget": "other",
    "ruleName": "C4",
    "group": [
        {
            "budget": "other",
            "percentage": 0
        }
    ]
  }

我执行了以下操作,但结果与我上面期望的结果不符:

this.group = list.map((i)=>{
  return {
    budget: i.budget,
  }
})
this.payments = list.map((i)=>{
  return {
    budget: i.budget,
    amtPercentage: i.percentage ? i.percentage : 0,
    rulename: i.rulename,
    group: this.group
  }
})

执行上述代码后,以下是结果:

[
{
    "budget": "online",
    "ruleName": "C1",
    "group": [
        {
            "budget": "onlne",
            "percentage": 50.0
        },
        {
            "budget": "offline",
            "percentage": 50.0
        },
        {
            "budget": "other",
            "percentage": 0
        }
    ]
},

{
    "budget": "offline",
    "ruleName": "C1",
    "group": [
        {
            "budget": "onlne",
            "percentage": 50.0
        },
        {
            "budget": "offline",
            "percentage": 50.0
        },
        {
            "budget": "other",
            "percentage": 0
        }
    ]
},

{
    "budget": "other",
    "ruleName": "C4",
    "group": [
        {
            "budget": "onlne",
            "percentage": 50.0
        },
        {
            "budget": "offline",
            "percentage": 50.0
        },
        {
            "budget": "other",
            "percentage": 0
        }
    ]
}

我不知道如何根据以下条件过滤嵌套的分组数组:如果父级数组的budget属性等于group.budget属性,则只返回该对象而不是所有对象。

非常感谢您的帮助,提前致谢。

注意:我正在使用带有angular-2的typescript。


嗨..我向您推荐这个库:https://github.com/kutyel/linq.ts,使用它可以实现您的目标。 - federico scamuzzi
谢谢你的建议,但也许我可以在我的下一个项目中考虑这个。 - tutorialfeed
1个回答

9
this.payments = list.map((i)=>{
  return {
    budget: i.budget,
    amtPercentage: i.percentage ? i.percentage : 0,
    rulename: i.rulename,
    group: this.group.filter((x) => i.budget === x.budget)
  }
})

编辑简化:

this.payments = list.map((listElement) => ({
    ...listElement,
    amtPercentage: listElement.percentage || 0,
    group: this.group.filter((groupElement) => listElement.budget === groupElement.budget)
}))

谢谢您的解决方案,但是我得到的 group 是一个空数组。请参见以下内容:[ { "budget": "在线", "ruleName": "C1", "group": [] }, { "budget": "离线", "ruleName": "C1", "group": [] }, { "budget": "其他", "ruleName": "C4", "group": [] } ] - tutorialfeed
如果 this.group 是空的,那么呢?筛选器只会选择 this.group 中具有当前元素(i)的 budget 值的元素。 - mTv
是的,正确的,它应该工作,但仍然是空的,我不知道为什么? - tutorialfeed
现在它可以工作了...是我没注意到的愚蠢的打字错误。再次感谢您挽救我的一天。干杯!!! - tutorialfeed
没问题 :) 请随意点击我回答旁边的勾号(✓)将其接受为正确答案。 - mTv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接