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],并添加一个检查。根据标志的值,我可以使用鸡尾酒[字段]或鸡尾酒[字段][子字段]。多谢!很高兴你弄明白了。