javascript - 如何使用 lodash 检查另一个数组中的数组值

标签 javascript lodash graphql

我的查询过滤器

export const resolvers = {
    Query: {
        allItems: (_, { value }) => getAllLinks()
            .then(result => filter(result, val => val.custom_attributes
                .find(customVal =>
                    customVal.attribute_code === 'category_ids' && isEqual(customVal.value, value)
                )
                )),
    },

我的架构

const typeDefs = `
    type Item  {
        id: ID!
        name: String
        price: Float
        custom_attributes: [CUSTOM_ATTRIBUTES]
    }

    union CUSTOM_ATTRIBUTES = CustomString | CustomArray 

   type CustomString {
    attribute_code: String
    value: String
  }

  type CustomArray {
    attribute_code: String
    value: [String]

  } 

  type Query {
    allItems(value : [String]): [Item]!

  }
`; 

目前(正如我所想)我的过滤器在 mysql 中作为 AND 条件工作。
例如我有3个字段
首先

{
 value: ["3", "5"]
}

第二

{
 value: ["3", "5", "7"]
}

第三

{
 value: ["3"]
}

我的参数变量是["3"] 因为我使用 isEqual 函数,它只会返回第三个字段。这是不正确的,因为 ["3"] 位于所有三个字段中。 lodash 是否有另一个功能可以解决这个小问题?

最佳答案

有两种不同的解决方案,具体取决于您想要实现的目标。

对于简单的情况,value数组始终包含 1 个元素,这两个选项都可以。

我将使用这个参数来显示差异:["3", "7"]

选项1:字段必须包含任何值

如果您希望获得所有 3 个字段,因为在变量和 "3" 中至少找到了数组中的一项(在本例中为 customVal.value)那么你应该使用lodash's intersection并检查结果是否不是空数组。像这样的东西:

intersection(customVal.value, value).length > 0

如果在 customVal.value 中都找到至少一个项目,则此表达式为 true并在 value .

选项2:字段必须包含所有值

如果在我的示例中,您希望仅获得第二个字段,因为数组中的所有项目都必须在变量和 customVal.value 中找到那么你应该使用lodash's difference并检查结果是否为空数组。像这样的东西:

difference(value, customVal.value).length === 0

在这种情况下参数的顺序很重要。

如果 value 中的所有项,则此表达式为 true也可以在 customVal.value 中找到。 customVal.value 中的其他值difference 不会返回因为我们使用了value作为第一个参数。

(此选项也可以通过 intersection 并将结果的长度与参数的数组长度进行比较来实现)

关于javascript - 如何使用 lodash 检查另一个数组中的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652327/

相关文章:

javascript - 无法从 Angular Controller 读取 lodash 属性

node.js - 如何将查询逻辑添加到基于 graphql-sequelize 的设置中?

node.js - 为什么我无法使用 axios 从 graphql 获得可用的响应?

javascript - 获取 CouchDB 附件并将其显示在 html 页面上

javascript - 通过ajax填充表非常慢

javascript - 使用lodash过滤数据

GatsbyJS 中的 GraphQL 过滤器

javascript - CSS/JS/Jquery 中的 SVG 发光效果

javascript - 使用 highcharts 在 php、mysql 中制作图表

lodash - 获取柯里化(Currying)函数的数量