Lodash 3.10中_.find使用变量作为参数失效问题咨询
这不是Bug,是JavaScript语法特性导致的问题
你遇到的这个情况完全不属于Lodash的Bug,根源在于ES5及更早版本的JavaScript对象字面量语法限制:当你在对象字面量里写{prop: 值}时,这里的prop会被当作字符串字面量"prop"来处理,而不是读取变量prop的值。所以你的第一个_.find调用其实是在数组里找键名为"prop"的元素,自然找不到结果。
解决方法有这几种:
1. 先构建查询对象(ES5兼容,适合Lodash 3.x)
先创建一个空对象,再通过方括号语法把变量作为键名赋值:
var arr=[ { "RHID||'-'||NOME": "3313-Abilio Dias Fernandes", "VAL": "CMIP@3313@1987-01-05", "OTHERVALUES": "400@1900-01-01@200@1900-01-01" }, ]; var prop="RHID||'-'||NOME"; // 先构建查询对象 var queryObj = {}; queryObj[prop] = "3313-Abilio Dias Fernandes"; console.log(_.find(arr, queryObj)); // 现在能正常找到目标元素
2. 使用回调函数形式(更灵活,兼容性好)
直接给_.find传一个回调函数,手动判断属性值:
var arr=[ { "RHID||'-'||NOME": "3313-Abilio Dias Fernandes", "VAL": "CMIP@3313@1987-01-05", "OTHERVALUES": "400@1900-01-01@200@1900-01-01" }, ]; var prop="RHID||'-'||NOME"; console.log(_.find(arr, function(item) { return item[prop] === "3313-Abilio Dias Fernandes"; }));
3. 若环境支持ES6+,用计算属性名
如果你的运行环境支持ES6语法,可以直接在对象字面量里用方括号包裹变量作为键名:
var arr=[ { "RHID||'-'||NOME": "3313-Abilio Dias Fernandes", "VAL": "CMIP@3313@1987-01-05", "OTHERVALUES": "400@1900-01-01@200@1900-01-01" }, ]; var prop="RHID||'-'||NOME"; console.log(_.find(arr, {[prop]: "3313-Abilio Dias Fernandes"}));
因为你用的是Lodash 3.10版本,这个版本主要面向ES5环境,所以前两种方法会更稳妥。
内容的提问来源于stack exchange,提问作者Leonel Matias Domingos
相关产品推荐
相关产品推荐

