下划线.js : _.where() 使用第一个参数,但不适用于第二个参数

underscore.js : _.where() work with first argument but not the second

本文关键字:参数 第一个 不适用 第二个 适用于 js where 下划线      更新时间:2023-09-26

我是下划线的初学者.js,我正在尝试使用 _.where() 来过滤我的数据,有两个参数。

我的json data.foo看起来像这样:

{"foo":[
    {"vag_id":"6","ind_id":"ade","res":"76.56","tx":"66"},
    {"vag_id":"6","ind_id":"aha","res":null,"tx":null}
...
]}

我的代码是这样的:

ind_id = $('#fk_ind_id').val(); // return 'ade'
vag_id = $('#fk_vag_id').val(); // return 6
data_res = _.where(data.foo, { vag_id : vag_id , ind_id : ind_id });

当我尝试做控制台.log(data_res)时,它等于 [] ...当我只使用带有vag_id参数的 _.where() 时,它可以正常工作。

看不出问题出在哪里...

DOM 节点的vag_id是一个数字。根据数据将其更改为字符串将使其正常工作。

Underscore的where()卸载到filter()matches()这就是为什么类型很重要。

这工作正常:

var data = {
    foo: [
        {"vag_id":"6","ind_id":"ade","res":"76.56","tx":"66"},
        {"vag_id":"6","ind_id":"aha","res":null,"tx":null}
    ]
};
var data_res = _.where(data.foo, { vag_id : '6' , ind_id : 'ade' });
console.log(JSON.stringify(data_res));

如果你查看UnderscoreJS注释源代码,你会发现_.where使用_.matches发出严格的相等性检查(===)。您的问题可能是不匹配的类型,例如将6(数字)与"6"(字符串)进行比较。