无法读取未定义的 Javascript 和 underscore.js 的 属性

Cannot read property of undefined Javascript and underscore.js

我正在使用 underscore.js 在 JSON 中查找特定数据。数据作为对象返回,但是当我尝试读取 "Date" 属性 时,我得到了未定义的信息。但是,我可以获取相同的数据字符串并创建一个新对象并访问刚找到的日期。我做错了什么?

var Activities = [{
    "Place": "Home",
    "Activities": [{
        "Date": "2014-11-28T00:00:00",
        "Activities": [{
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }]
    }, {
        "Date": "2014-12-01T00:00:00",
        "Activities": [{
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }, {
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }, {
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }, {
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }, {
            "TV": "Show",
            "Eat": "Show",
            "HadFun": false
        }]
    }]
}];

_.each(Activities, function (item) {
    _.each(item, function (Activities) {
        var found = _.where(Activities, {
            Date: "2014-11-28T00:00:00"
        });
        console.log(found[0].Date);

        var t = [{
            "Date": "2014-11-28T00:00:00",
            "Activities": [{
                "TV": "Show",
                "Eat": "Show",
                "HadFun": false
            }]
        }];
        console.log(t[0].Date);
    });
});

第一次执行 Activities 时,您是在用一个对象遍历数组。

然后下一个 each 从遍历对象属性开始。首先,它遍历 Place,因此没有找到日期 属性 与该值匹配的对象。当第二个 each 遍历 Activities 时,它会找到值

Fiddle: http://jsfiddle.net/AtheistP3ace/fbmwrLxz/

// loops Activities array
_.each(Activities, function (item) {
    // First loop loops once since Place is just a string value
    // Second loop loops twice since Activities has two objects
    _.each(item, function (Activities) {
        var found = _.where(Activities, {
            Date: "2014-11-28T00:00:00"
        });

        if (found[0]) {
            console.log(found[0].Date);
        }

        var t = [{
            "Date": "2014-11-28T00:00:00",
            "Activities": [{
                "TV": "Show",
                "Eat": "Show",
                "HadFun": false
            }]
        }];
        console.log(t[0].Date);
    });
});

这里是 fiddle 通过打印出每次迭代更清楚地显示发生了什么:http://jsfiddle.net/AtheistP3ace/fbmwrLxz/1/

found 包含匹配对象的数组:

var found = _.where(Activities[0].Activities, { Date: "2014-11-28T00:00:00" });

产出

[{"Date":"2014-11-28T00:00:00","Activities":[{"TV":"Show","Eat":"Show","HadFun":false}]}]