Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅从firebase中提取节点/值,而不提取键?_Javascript_Dictionary_Firebase - Fatal编程技术网

Javascript 如何仅从firebase中提取节点/值,而不提取键?

Javascript 如何仅从firebase中提取节点/值,而不提取键?,javascript,dictionary,firebase,Javascript,Dictionary,Firebase,如何使用javascript仅从firebase提取节点而不提取密钥?换句话说,我只需要下面firebase中的键值对的值,这意味着我不需要下面的唯一键,只需要下面的键 目前,我的代码是 function PullFirebase() { new Firebase('https://myfirebase.firebaseIO.com/quakes').on('value', function (snapshot) { var S = snapshot.val();

如何使用javascript仅从firebase提取节点而不提取密钥?换句话说,我只需要下面firebase中的键值对的值,这意味着我不需要下面的唯一键,只需要下面的键

目前,我的代码是

function PullFirebase() {
    new Firebase('https://myfirebase.firebaseIO.com/quakes').on('value', function (snapshot) {
        var S = snapshot.val();

        function printData(data) {
            var f = eval(data);
            console.log(data + "(" + f.length + ") = " + JSON.stringify(f).replace("[", "[\n\t").replace(/}\,/g, "},\n\t").replace("]", "\n]"));
        }
        printData(S);
    });
}
PullFirebase();
这将在控制台中生成以下内容

[object Object](undefined) = {"-JStYZoJ7PWK1gM4n1M6":{"FID":"quake.2013p618454","agency":"WEL(GNS_Primary)","depth":"24.5703","latitude":"-41.5396","longitude":"174.1242","magnitude":"1.7345","magnitudetype":"M","origin_geom":"POINT (174.12425 -41.539614)","origintime":"2013-08-17T19:52:50.074","phases":"17","publicid":"2013p618454","status":"automatic","type":"","updatetime":"2013-08-17T19:54:11.27"},
    "-JStYZsd6j4Cm6GZtrrD":{"FID":"quake.2013p618440","agency":"WEL(GNS_Primary)","depth":"26.3281","latitude":"-38.8725","longitude":"175.9561","magnitude":"2.6901","magnitudetype":"M","origin_geom":"POINT (175.95611 -38.872468)","origintime":"2013-08-17T19:45:25.076","phases":"13","publicid":"2013p618440","status":"automatic","type":"","updatetime":"2013-08-17T19:48:15.374"},...
但我只想要字典,比如

[{"FID":"quake.2013p618454","agency":"WEL(GNS_Primary)","depth":"24.5703","latitude":"-41.5396","longitude":"174.1242","magnitude":"1.7345","magnitudetype":"M","origin_geom":"POINT (174.12425 -41.539614)","origintime":"2013-08-17T19:52:50.074","phases":"17","publicid":"2013p618454","status":"automatic","type":"","updatetime":"2013-08-17T19:54:11.27"},{"FID":"quake.2013p597338","agency":"WEL(GNS_Primary)","depth":"5.0586","latitude":"-37.8523","longitude":"176.8801","magnitude":"2.2362","magnitudetype":"M","origin_geom":"POINT (176.88006 -37.852307)","origintime":"2013-08-10T00:21:54.989","phases":"17","publicid":"2013p597338","status":"automatic","type":"","updatetime":"2013-08-10T03:42:41.324"}...]

如果我理解正确,您希望将所有子对象置于
地震

这里通常有两种方法:

  • 获取父节点的值,并在子节点上循环
  • 在将子节点添加/更新/删除到父节点时监视
  • 您的方法与#1匹配,因此我将首先回答这个问题。我还将给出方法#2的一个示例,当数据集发生变化时,这种方法更有效

    迭代Firebase引用的子级 在('value')上的
    处理程序中,您可以使用以下方法跳过唯一ID:

    forEach的
    forEach
    函数是同步的,因此我们可以简单地等待循环完成,然后创建交叉过滤器

    监视Firebase引用的子级 在这种情况下,最佳构造为:

    var quakes = new Firebase('https://myfirebase.firebaseIO.com/quakes');
    var quakeCount = 0;
    quakes.on('child_added', function (snapshot) {
        var quake = snapshot.val();
        quakeCount++;
        console.log("quakeCount="+quakeCount+", FID="+quake.FID);
    });
    quakes.on('child_removed', function (old_snapshot) {
        var quake = old_snapshot.val();
        quakeCount--;
        console.log("quakeCount="+quakeCount+", removed FID="+quake.FID);
    });
    
    使用此代码结构,您可以主动监听添加和删除的地震。您仍然需要保留所有地震的数组,然后在
    child\u added
    child\u changed
    child\u removed
    中对其进行修改

    他们如何比较
    当您第一次运行代码时,对子项的监视将产生与('value',
    构造上的
    相同的数据。但是当以后在('value')上添加/删除子项时,
    将再次接收所有地震,而
    打开('child_added',
    打开('child_removed',
    将仅在有问题的地震中调用。

    如果我理解正确,您希望将所有子对象置于
    地震下

    这里通常有两种方法:

  • 获取父节点的值,并在子节点上循环
  • 在将子节点添加/更新/删除到父节点时监视
  • 您的方法与#1匹配,因此我将首先回答这个问题。我还将给出方法#2的示例,该方法在数据集更改时更有效

    迭代Firebase引用的子级 在('value')上的
    处理程序中,您可以使用以下方法跳过唯一ID:

    forEach的
    forEach
    函数是同步的,因此我们可以简单地等待循环完成,然后创建交叉过滤器

    监视Firebase引用的子级 在这种情况下,最佳构造为:

    var quakes = new Firebase('https://myfirebase.firebaseIO.com/quakes');
    var quakeCount = 0;
    quakes.on('child_added', function (snapshot) {
        var quake = snapshot.val();
        quakeCount++;
        console.log("quakeCount="+quakeCount+", FID="+quake.FID);
    });
    quakes.on('child_removed', function (old_snapshot) {
        var quake = old_snapshot.val();
        quakeCount--;
        console.log("quakeCount="+quakeCount+", removed FID="+quake.FID);
    });
    
    使用此代码结构,您可以主动监听添加和删除的地震。您仍然需要保留所有地震的数组,然后在
    child\u added
    child\u changed
    child\u removed
    中对其进行修改

    他们如何比较 当您第一次运行代码时,对子项的监视将产生与('value',
    构造上的
    相同的数据。但是当以后在('value')上添加/删除子项时,
    将再次接收所有地震,而
    打开('child_added',
    打开(“child_removed”(已移除),
    只会在有问题的地震中被调用