Angular Firebase 正在从匿名用户那里检索收集的数据

Angular Firebase retrieving collected data from anonymous users

我有一个使用 Angular 和 Firebase 的调查系统,它将用户回答的结果存储在每个用户特定的对象中。这适用于存储数据,但我意识到由于每个对象都有唯一的名称,可能很难将数据拉回。

我想遍历每个对象并将所有值放在一起。因此,对于所有 50 个条目,找到 comprehension.icons.damage[1]

的总数

我如何构造一个循环遍历具有唯一名称的对象,如下面的对象?

这是我的json结构

  "usersanonymous:-JgTyGt6An3WWyLvnnuu" : {
"comprehension" : {
  "-JgTzC0r_H58n7y8Al_-" : {
    "date" : 1422154060632,
    "icons" : [ {
      "damage" : [ null, "0", "3", "3" ],
      "ocular" : [ null, "2", "3", "1" ],
      "physical therapy" : [ null, "0", "4", "4" ],
      "skin" : [ null, "4", "0", "1" ]
    } ]
  }
}


 },
  "usersanonymous:-JgU-ryIpI-HR7D4VDkp" : {
    "comprehension" : {
      "-JgU0MwBwisNbjvRFGOT" : {
        "date" : 1422154629142,
        "icons" : [ {
          "damage" : [ null, "0", "3", "4" ],
          "ocular" : [ null, "1", "4", "3" ],
          "physical therapy" : [ null, "2", "4", "3" ],
          "skin" : [ null, "4", "1", "3" ]
        } ]
      }
    }
  }

根据您的输入数据,我会创建一个函数来仅提取您感兴趣的数据。我用原始 javascript 写了这个 - 如果您使用的是 jQuery使用 $.map 而不是 for (x in y) 可能会很有趣。


var data = {
    "usersanonymous:-JgTyGt6An3WWyLvnnuu": {
        "comprehension": {
            "-JgTzC0r_H58n7y8Al_-": {
                "date": 1422154060632,
                "icons": [{
                    "damage": [null, "0", "3", "3"],
                    "ocular": [null, "2", "3", "1"],
                    "physical therapy": [null, "0", "4", "4"],
                    "skin": [null, "4", "0", "1"]
                }]
            }
        }
    },
    "usersanonymous:-JgU-ryIpI-HR7D4VDkp": {
        "comprehension": {
            "-JgU0MwBwisNbjvRFGOT": {
                "date": 1422154629142,
                "icons": [{
                    "damage": [null, "0", "3", "4"],
                    "ocular": [null, "1", "4", "3"],
                    "physical therapy": [null, "2", "4", "3"],
                    "skin": [null, "4", "1", "3"]
                }]
            }
        }
    }
};

function extractComprehension(rawData) {
    var result = [];

    for (var usersanonymous in rawData) {
        usersanonymous = rawData[usersanonymous];
        if (usersanonymous.comprehension) {
            for (var token in usersanonymous.comprehension) {
                token = usersanonymous.comprehension[token];
                if (token.icons) {
                    result.push(token.icons[0]);
                }
            }
        }
    }

    return result;
}

function sumOf(objectList, property, index) {
    var result = 0;

    for (var o in objectList) {
        var numbers = (objectList[o][property] || []);

        if (numbers.length >= index) {
            result += parseInt(numbers[index], 10);
        }
    }

    return result;
}

使用这个 mini api 你可以获得你感兴趣的属性的总和:


// Get the data array.
var comprehension = extractComprehension(data);

// Sum some property.
console.log(sumOf(comprehension, 'damage', 3));