首页 > 解决方案 > 如何使用reduce删除对象数组中的空值?

问题描述

我正在尝试删除 null 或空值:

const generated_salary = [{"f_name":"Cy","deduction":{"11":{"amount":736,"wrk_pay_id":11}}},{"f_name":"Hel","deduction":{"10":{"amount":714.29,"wrk_pay_id":10},"14":{"amount":500,"wrk_pay_id":14}}},{"f_name":"edd","deduction":{"13":{"amount":857.14,"wrk_pay_id":13}}},{"f_name":"JAY","deduction":{"":{"amount":"","wrk_pay_id":""}}}]

const deductions = generated_salary.reduce((c, { deduction }) => ({
  ...c,
  ...deduction
}), {})

console.info("deductions =", deductions)

我想要达到的结果:

info: deductions = {
  "10": {
    "amount": 714.29,
    "wrk_pay_id": 10
  },
  "11": {
    "amount": 736,
    "wrk_pay_id": 11
  },
  "13": {
    "amount": 857.14,
    "wrk_pay_id": 13
  },
  "14": {
    "amount": 500,
    "wrk_pay_id": 14
  }
]

标签: javascript

解决方案


一种方法是仅在内部非空c时向结果对象添加新条目:amountdeduction

const deductions = generated_salary.reduce( (c, {deduction}) => {
    for (let [key, value] of Object.entries(deduction)) {
        if (value.amount) c[key] = value;
    }
    return c;
}, {});

如果你想让它更漂亮:

const deductions = generated_salary.reduce( (c, {deduction}) => ({
  ...c,
  ...Object.fromEntries(Object.entries(deduction).filter(([key, value]) => value.amount))
}), {});

...但我个人觉得这比for循环更难遵循。YMMV。


推荐阅读