Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何组合来自两个不同来源的过滤器&;在javascript中作为单一on返回?_Javascript - Fatal编程技术网

如何组合来自两个不同来源的过滤器&;在javascript中作为单一on返回?

如何组合来自两个不同来源的过滤器&;在javascript中作为单一on返回?,javascript,Javascript,下面是我使用的过滤技术,它使用来自两个不同来源的过滤器过滤掉storeItems filtersFromSource1是一个包含大量过滤参数的源&就像wise filtersFromSource2是另一个包含另一组过滤参数的源一样。(请不要担心那件事) 我的问题是如何组合来自这两个独立源的/concat结果并作为单个流/返回返回 目前我有两种方法 这是第一个 const getFiltered = (filtersFromSource1, filtersFromSource2) => {

下面是我使用的过滤技术,它使用来自两个不同来源的过滤器过滤掉storeItems

filtersFromSource1是一个包含大量过滤参数的源&就像wise filtersFromSource2是另一个包含另一组过滤参数的源一样。(请不要担心那件事)

我的问题是如何组合来自这两个独立源的/concat结果并作为单个流/返回返回

目前我有两种方法

这是第一个

const getFiltered = (filtersFromSource1, filtersFromSource2) => {
    return storeItems.filter((storeItem) => {
        return Object.keys(filtersFromSource1).every((k) => {
          return filtersFromSource1[k].every((filter) => {
            if (filter.param1) {
                return filter.param1
                  .toString()
                  .toLocaleLowerCase()
                  .includes(filter.trim().toLocaleLowerCase());
              }

            //   ...some other filterings from source1 todo here
            return storeItem && Object.keys(filtersFromSource2).every((k) => {
                return filtersFromSource2[k].every((filter) => {
                  if (filter.param1) {
                      return filter.param1
                        .toString()
                        .toLocaleLowerCase()
                        .includes(filter.trim().toLocaleLowerCase());
                    }

                    // ...some other filterings from source2 todo here
                  return storeItem
              })
        })
    })
    })
}
这是第二个

const getFiltered = (filtersFromSource1, filtersFromSource2) => {
    return storeItems.filter((storeItem) => {
        return Object.keys(filtersFromSource1).every((k) => {
          return filtersFromSource1[k].every((filter) => {
            if (filter.param1) {
                return filter.param1
                  .toString()
                  .toLocaleLowerCase()
                  .includes(filter.trim().toLocaleLowerCase());
              }

            //   ...some other filterings from source1 todo here
            return storeItem

    })
    }) && Object.keys(filtersFromSource2).every((k) => {
        return filtersFromSource2[k].every((filter) => {
          if (filter.param1) {
              return filter.param1
                .toString()
                .toLocaleLowerCase()
                .includes(filter.trim().toLocaleLowerCase());
            }

            // ...some other filterings from source2 todo here
          return storeItem
      })
})
}
我只是想知道是否有更好的方法。(或类似于用于组合过滤选项的行业标准方法。)

记住source1和source2是两个不同的过滤源,具有不同的参数

我在angular应用程序中使用了这种技术。因此,如果有任何特定于角度/相关的东西,也请提及

如果有更好的方法使用其他第三方库,如lodash或ramda,请建议


这会有帮助的

请提供示例filtersFromSource1、filtersFromSource2和storeItems数据。这只是一些键值对。如果您提供所需的示例输入和输出,将非常有用。然后,您可以先组合两个筛选器(使用扩展运算符),然后只运行一次筛选,而不是两次运行相同的逻辑。几乎所有的代码都在重复。因此,可能需要创建一个函数以使其可重用。请提供示例filtersFromSource1、filtersFromSource2和storeItems数据。这只是一些键值对。如果提供所需的示例输入和输出,这将非常有用。然后,可能可以先组合两个筛选器(使用扩展运算符)然后你可以只运行一次过滤,而不是两次运行相同的逻辑。几乎所有的代码都在重复。所以可能需要创建一个函数使其可重用。