首页 > 解决方案 > lodash 重构过滤器函数

问题描述

我有以下代码,两个组件都使用 lodash 过滤器,我如何抽象函数以便不重复代码?

<VictoryScatter
          style={{
            data: { fill: BRAND_COLORS.white, stroke: BRAND_COLORS.chartLine.gradientGrayStart, strokeWidth: 3 },
          }}
          size={5}
          data={_.filter(loanLimitData, (value, key) => {
            return key !== 0 && key !== 6;
          })}
        />
        <VictoryScatter
          style={{
            data: { fill: BRAND_COLORS.white, stroke: BRAND_COLORS.chartLine.gradientBlueStart, strokeWidth: 3 },
          }}
          size={5}
          data={_.filter(loanBalanceData, (value, key) => {
            return key !== 0 && key !== 6;
          })}
        />

所以,我需要为

_.filter(myArray, (value, key) => {
            return key !== 0 && key !== 6;
          })

标签: typescriptrefactoringlodash

解决方案


只需将数组作为参数:

const myFilter = <T extends any>(array: T[]): T[] =>
    _.filter(array, (_, key) => {
        return key !== 0 && key !== 6;
    })

仅供参考,您可以使用内置Array.prototype.filter方法执行相同操作:

const myFilter = <T extends any>(array: T[]): T[] =>
    array.filter((_, key) => {
        return key !== 0 && key !== 6;
    })

在您要编写的组件中:

data={myFilter(loanLimitData)}
data={myFilter(loanBalanceData)}

推荐阅读