如何使用Lodash的_.filter()正确筛选state为USA或Canada且id为1的cart数组
错误原因
你原先的写法存在两个问题:
- JS 语法错误:
{"Canada", "USA"}不符合对象键值对的定义规则,代码运行时会直接抛出语法异常 - Lodash 语法规则不匹配:
_.filter传入对象作为匹配条件时,只会做全等于比对,无法自动判断字段值是否属于某个指定集合
正确实现写法
写法1:基础回调逻辑(可读性最高)
var oddNo = _.filter(cart, function(item) { return (item.state === 'Canada' || item.state === 'USA') && item.id === '1'; }); console.log(oddNo);
如果是支持ES6+的环境,可以简化为箭头函数写法:
const oddNo = _.filter(cart, item => (['Canada', 'USA'].includes(item.state)) && item.id === '1');
写法2:借助Lodash内置方法简化多值匹配
如果可选的state值很多,可以用_.includes简化判断逻辑:
const allowStates = ['Canada', 'USA']; const oddNo = _.filter(cart, item => _.includes(allowStates, item.state) && item.id === '1');
内容的提问来源于stack exchange,提问作者NEW VK
相关产品推荐
相关产品推荐

