如何使用Lodash根据ID查找对象?解决代码返回undefined问题
解决Lodash _.find返回undefined的问题
嘿,我发现你在使用Lodash的_.find方法时遇到了返回undefined的问题,这是因为调用方法的参数格式和细节上出了几个小问题,我来帮你梳理下:
你原来代码的问题点:
- 第一个参数应该是你的数组
objects,但你写的是object(少了个s,变成了未定义的变量); _.find的第二个参数如果是字段名,需要用字符串包裹(你写的id会被当作变量而非字段名);- 你的数据里
id是字符串类型的'11',但你传了数字11,类型不匹配会导致匹配失败; - 另外,
_.find的参数顺序虽然支持_.find(collection, path, value),但前提是前面的参数要正确。
几种正确的写法:
写法1:对象匹配(最直观)
直接传入一个匹配条件对象,Lodash会自动匹配对应属性:
const targetObj = _.find(objects, { id: '11' });
写法2:迭代函数匹配(灵活性更高)
如果需要更复杂的匹配逻辑,可以传入一个自定义函数:
const targetObj = _.find(objects, (obj) => obj.id === '11');
写法3:属性路径+值的简写(注意细节)
如果想用你最初的参数形式,需要修正字段名和值的类型:
const targetObj = _.find(objects, 'id', '11');
完整示例代码:
const objects = [ { id: '11', name: 'ron', surname: 'lesner', group: 'A' }, { id: '12', name: 'don', surname: 'lesner', group: 'B' }, { id: '13', name: 'ton', surname: 'lesner', group: 'A' }, ]; // 任意一种写法都能得到你想要的结果 const result = _.find(objects, { id: '11' }); console.log(result); // 输出:{ id: '11', name: 'ron', surname: 'lesner', group: 'A' }
只要修正这些细节,就能正确匹配到目标对象啦!
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

