【问题标题】:Use 2 filter in array java script在数组javascript中使用2个过滤器
【发布时间】:2022-01-10 02:51:28
【问题描述】:

我有一个这样的数组

我只想携带已检查 = true 且已检查付款 = true 的分期付款

我有这个数组

 0: {
    checked: true,
    code: 100.
    paymant: Array(2)
    {
        0: {data: 03/12/2021, checked: true},
        1: {data: 03/12/2021}
    }
 },
  1: {
    code: 100.
    paymant: Array(2)
    {
        0: {data: 03/12/2021},
        1: {data: 03/12/2021}
    }
 }

// Real Data
const data = [
    {
        checked: true,
        code: 100,
        payments: [
            {data: 'checked', checked: true},
            {data: 'not-checked'}
        ]
    },
    {
        code: 100,
        payments: [
            {data: 'not-checked'},
            {data: 'not-checked'}
        ]
    }
];

我想要这个

0: {
    checked: true,
    code: 100.
    paymant: Array(1)
    {
        0: {data: 03/12/2021, checked: true},
    }
 },

我尝试这样做,但没有工作

 installments.filter(i => i.checked).filter(i => i.paymant.filter(p => p.checked))

【问题讨论】:

  • 你的数据不正确。

标签: javascript arrays typescript


【解决方案1】:

第一个过滤器很简单,但您需要重建支付数组,使其仅包含选中的条目。

const data = [
    {
        checked: true,
        code: 100,
        payments: [
            {data: 'checked', checked: true},
            {data: 'not-checked'}
        ]
    },
    {
        code: 100,
        payments: [
            {data: 'not-checked'},
            {data: 'not-checked'}
        ]
    }
];

const checked = (item) => item && item.checked;
const paymentCheckedMapper = (item) => (
    {...item, payments: item.payments.filter(checked)}
);

data.filter(checked).map(paymentCheckedMapper)

https://jsfiddle.net/vebwfnL0/

【讨论】:

    【解决方案2】:

    因为您需要混合搭配filtermap。你可以在这里使用reduce不用过滤再贴图,会性价比问题

    const data = [
      {
        checked: true,
        code: 100,
        paymant: [
          { data: 03 / 12 / 2021, checked: true },
          { data: 03 / 12 / 2021 },
        ],
      },
      {
        code: 101,
        paymant: [{ data: 03 / 12 / 2021 }, { data: 03 / 12 / 2021 }],
      },
    ];
    
    const getPaid = (records = []) => {
      return records.reduce((acc, record) => {
        if (!record.checked) return acc;
        const paymant = record.paymant.filter((paymant) => paymant.checked);
        if (paymant.length) {
          acc.push({ ...record, paymant });
        }
        return acc;
      }, []);
    };
    console.log(getPaid(data));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2017-12-18
      • 2019-12-29
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多