Underscore.js - 在嵌套的Json中过滤

时间:2014-04-10 17:12:21

标签: javascript json underscore.js

我想得到所有值,其中category.id = 1所以我应该得到2个结果

我的JSON看起来像这样:

var test = [
            {
                "id": 1,
                "name": "name1",
                "value": "value1",
                "category": {
                    "id": 1,
                    "name": "category1"
                }
            },
            {
                "id": 2,
                "name": "name2",
                "value": "value2",
                "category": {
                    "id": 1,
                    "name": "category1"
                }
            },
            {
                "id": 3,
                "name": "name3",
                "value": "value3",
                "category": {
                    "id": 2,
                    "name": "category2"
                }
            }
        ];

我的JavaScript看起来像这样:

var x = _.filter(test,
            function (innerObject) {
                return _.filter(innerObject,
                    function (category) {
                        return  category.id === 1;
                    });
            });

console.log(x);

I made a JS Fiddle但我每次都会得到所有3个元素......不仅仅是2个正确的元素!

我也试过像

这样的东西
var x = _.where(test, {"category":{"id":2}});
console.log(x);

对我来说似乎是合乎逻辑的,但数组总是空的

another jsFiddle

我希望有人可以告诉我我做错了什么...... 谢谢!

2 个答案:

答案 0 :(得分:4)

这应该有效:

var x = test.filter(function (a) {return a.category.id === 1 })

答案 1 :(得分:2)

那是因为你在哪里搜索一个完全像{"category":{"id":1}}的元素而你的对象是{"category":{"id":1,"name":"category1"}}

尝试

_.filter(test, function(a){ return a.category && a.category.id === 1; });