如何获取嵌套子对象

时间:2018-02-05 10:56:21

标签: javascript firebase firebase-realtime-database

[
    {
        "childKey": "o4oqRIVA3bdY33",
        "childData": {
            "serviceCity": "Santa Rosa",
            "serviceDate": {
                "2018-01-31": {
                    "clientId": "Y8valE4BUynL3y",
                    "Booked": false,
                    "shift": "Night"
                },
                "2018-02-02": {
                    "clientId": "Y8va12asdynL3y",
                    "Booked": false,
                    "shift": "Night"
                }
            },
            "serviceProvince": "Laguna"
        }
    }
]

这是我目前的回应...... 我有一个变量,用于保存ajax传递的数据。 var startDate = '2018-01-31' 如果serviceDate匹配/具有相同的startDate

,我想要做的就是获得此回复
router.get('/newWatch/:uuid',function(req, res){
    var avail = database.ref('availableWatch');
    var startDate = req.params.uuid;

    avail.once('value', function(snapshot){
        var promises = [];

        snapshot.forEach(function(childSnapshot){
            var childData = childSnapshot.val().serviceDate;
            var Datestarts = childData[startDate];
            console.log(Datestarts);
        }); 

        res.json(promises)
    });
});

但问题是我可以获取整个数据,但不能获取serviceDate中的数据。我不知道使用forEach是正确的做法..我想做的是获得具有serviceDate of 2018-01-31..

的availableWatch

3 个答案:

答案 0 :(得分:0)

你错过了这个:childSnapshot.childData.serviceDate

这应该适合你:

snapshot.forEach(function(childSnapshot){
            var childData = childSnapshot.childData.serviceDate;
            var Datestarts = childData[startDate];
            console.log(Datestarts);
        });

答案 1 :(得分:0)

我从你的问题中了解到,只有当startDate与serviceDate中的某个日期匹配时,你才想执行AJAX。

您可以使用Object.keys()从响应中获取serviceDate的密钥,并相应地继续执行代码。

var response=[
    {
        "childKey": "o4oqRIVA3bdY33",
        "childData": {
            "serviceCity": "Santa Rosa",
            "serviceDate": {
                "2018-01-31": {
                    "clientId": "Y8valE4BUynL3y",
                    "Booked": false,
                    "shift": "Night"
                },
                "2018-02-02": {
                    "clientId": "Y8va12asdynL3y",
                    "Booked": false,
                    "shift": "Night"
                }
            },
            "serviceProvince": "Laguna"
        }
    }
]

然后

var serviceDateData = Object.keys(response [0] .childData.serviceDate);

serviceDateData将包含["2018-01-31", "2018-02-02"]

现在您可以使用逻辑来实现所需的功能。 希望它能帮到你

答案 2 :(得分:0)

尝试以下

router.get('/newWatch/:uuid',function(req, res){
    var avail = database.ref('availableWatch');
    var startDate = req.params.uuid;

    avail.once('value', function(snapshot){
        var promises = [];

        snapshot.forEach(function(childSnapshot){
             promises.push(childSnapshot.childData.serviceDate[startDate]);
        });

        res.json(promises)
    });
});