【问题标题】:Filter an array with conditions across multiple attributes使用跨多个属性的条件过滤数组
【发布时间】:2023-02-08 23:42:07
【问题描述】:

我有一个包含父母和孩子的数组以及孩子的费用(可以有超过 3 项费用)。 我想过滤按父母分组的列表,并向父母展示孩子的组合在哪些地方有正负支出。 过滤掉只有正支出或只有负支出的父母。

输入数组:

let inputArray1 = [
    {
        'parent':'A',
        'child':'RST',
        'expense1':1,
        'expense2':2,
        'expense3':3,
    },
    {
        'parent':'A',
        'child':'EST',
        'expense1':4,
        'expense2':5,
        'expense3':6,
    },
    {
        'parent':'A',
        'child':'QST',
        'expense1':4,
        'expense2':2,
        'expense3':6,
    },
    {
        'parent':'B',
        'child':'EST',
        'expense1':1,
        'expense2':2,
        'expense3':-3,  //. <----Negative Expense
    },
    {
        'parent':'B',
        'child':'VST',
        'expense1':6,
        'expense2':2,
        'expense3':3,
    },
    {
        'parent':'B',
        'child':'NST',
        'expense1':3,
        'expense2':8,
        'expense3':7,
    },
    {
        'parent':'C',
        'child':'UST',
        'expense1':-8,
        'expense2':-2,
        'expense3':3,  //<--- Positive Expense
    },
    {
        'parent':'C',
        'child':'PST',
        'expense1':-6,
        'expense2':-5,
        'expense3':-3,
    },
    {
        'parent':'C',
        'child':'LST',
        'expense1':-3,
        'expense2':-8,
        'expense3':-7,
    },
    {
        'parent':'D',
        'child':'WST',
        'expense1':-8,
        'expense2':-2,
        'expense3':-3,
    },
    {
        'parent':'D',
        'child':'CST',
        'expense1':-6,
        'expense2':-5,
        'expense3':-3,
    },
    {
        'parent':'B',
        'child':'KST',
        'expense1':-3,
        'expense2':-8,
        'expense3':-7,
    }
]

输出数组:它应该只有 B 和 C,因为它们在孩子费用中有正负费用的组合。

let inputArray1 = [
        
        {
            'parent':'B',
            'child':'EST',
            'expense1':1,
            'expense2':2,
            'expense3':-3,
        },
        {
            'parent':'B',
            'child':'VST',
            'expense1':6,
            'expense2':2,
            'expense3':3,
        },
        {
            'parent':'B',
            'child':'NST',
            'expense1':3,
            'expense2':8,
            'expense3':7,
        },
        {
            'parent':'C',
            'child':'UST',
            'expense1':-8,
            'expense2':-2,
            'expense3':3,
        },
        {
            'parent':'C',
            'child':'PST',
            'expense1':-6,
            'expense2':-5,
            'expense3':-3,
        },
        {
            'parent':'C',
            'child':'LST',
            'expense1':-3,
            'expense2':-8,
            'expense3':-7,
        },
        
    ]

【问题讨论】:

  • 您已经尝试过什么代码?为什么它不起作用?
  • 如果父母有一些孩子只有正支出,而其他孩子只有负支出,没有特定的孩子有混合支出怎么办?你包括那个父母吗?

标签: javascript typescript loops filter ecmascript-6


【解决方案1】:

例如:

let outputArray = inputArray1.filter(item => {
  let expenses = [item.expense1, item.expense2, item.expense3];
  let hasPositiveExpense = expenses.some(expense => expense > 0);
  let hasNegativeExpense = expenses.some(expense => expense < 0);
  return hasPositiveExpense && hasNegativeExpense;
});

let parents = new Set();
outputArray = outputArray.filter(item => {
  if (!parents.has(item.parent)) {
    parents.add(item.parent);
    return true;
  }
  return false;
});
console.log(outputArray)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2023-03-31
    • 2021-10-20
    • 2015-10-28
    相关资源
    最近更新 更多