underscore.js:_. where()使用第一个参数而不是第二个参数

时间:2014-12-01 14:43:06

标签: javascript jquery underscore.js

我是underscore.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 });

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

不知道问题出在哪里......

2 个答案:

答案 0 :(得分:1)

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

下划线where()卸载到filter()matches(),这就是类型重要的原因。

答案 1 :(得分:1)

这很好用:

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 annotated source,您会发现_.where使用_.matches来发出严格的相等性检查(===)。您的问题可能是不匹配的类型,例如将6(数字)与"6"(字符串)进行比较。