Javascript JS中基于动态对象和值的过滤器数组

Javascript JS中基于动态对象和值的过滤器数组,javascript,arrays,reactjs,object,array-filter,Javascript,Arrays,Reactjs,Object,Array Filter,我有一个数组,其中包含不同对象的列表,我希望能够重复使用相同的函数来过滤同一数组中的不同对象和值 我的阵列 cocktailList = [ Object { "abv": "24", "alcoholic": "true", "strength": "medium", "type": Object { &qu

我有一个数组,其中包含不同对象的列表,我希望能够重复使用相同的函数来过滤同一数组中的不同对象和值

我的阵列

cocktailList = [
  Object {
    "abv": "24",
    "alcoholic": "true",
    "strength": "medium",
    "type": Object {
      "key": 3,
      "label": "Medium",
      "value": "medium",
    ...,
    ...,
    },
  },
  Object {
    ...
  },
]
我调用一个函数来过滤传递2个参数的数组:

  • 我要筛选的字段
  • 它应该过滤掉的值
这是我的函数和调用者

const drinkTypeHandler = (field, value) => {       
    const selectedType = cocktailList.filter((cocktail) => cocktail.field === value);
    console.log(selectedType); 
}

onPress={() => drinkTypeHandler(item.field, item.value)}
函数正在拾取“value”参数fine,但它没有使用我传递的“field”参数。 我尝试将其作为动态参数传递,如下所示,但仍然没有成功

cocktailList.filter((cocktail) => `cocktail.${field} === ${value}`)
如果我对字段值进行硬编码,它会起作用

i.e.
cocktailList.filter((cocktail) => cocktail.type.value === value)

您可以使用
鸡尾酒[field]

const drinkTypeHandler = (field, value) => {       
    const selectedType = cocktailList.filter((cocktail) => cocktail[field] === value);
    console.log(selectedType); 
}

要使用动态字段名,必须使用方括号。因此,您可以使用:

cocktailList.filter((鸡尾酒)=>cocktail[field]==value)


您将遇到的问题是
type
下的嵌套键/值对,因为您不能使用类似
type.value
的符号。

要使用变量访问对象属性,需要使用点符号

const drinkTypeHandler = (field, value) => {       
    const selectedType = cocktailList.filter((cocktail) => cocktail[field] === value);
    console.log(selectedType); 
}

您可以阅读有关

thank@veddermatic的更多信息-有没有访问嵌套键/值对的解决方案?不是简单的一行。您必须查看是否使用
“type”
作为
字段
参数调用该函数,然后在那里返回
属性,或者为嵌套查找引入第二个参数:
鸡尾酒[field][subfield]
太好了,我根据您的解释很容易找到了解决方案。我将参数拆分为[field][subfield],并添加一个检查。根据标志的值,我可以使用鸡尾酒[字段]或鸡尾酒[字段][子字段]。多谢!很高兴你弄明白了。