【问题标题】:Get and store multidimensional array not JSON in Firebase在 Firebase 中获取和存储多维数组而不是 JSON
【发布时间】:2015-07-11 09:58:56
【问题描述】:

我在 Javascript 中使用多维数组(不是 JSON)。

var Ar = [
 ['1','2013','A','Name1','1','1','3','3','1','2','3','4',''],
 ['2','2014','B','Name2','1','2','3','1','1','2','3','5',''],
 ['3','2015','C','Name3','1','2','4','4','1','2','5','4','']
];

要将数组 Ar 发送或存储到 Firebase 我使用的云:

var data = new Firebase("xxxx.firebaseIO.com");
data.set(Ar);

我经常使用这种二维数组形式。

我必须通过什么选项从 Firebase Cloud 获取或存储单个数据或数组?

  1. 像刷新和同步数组 Ar 与云端
  2. 在云端存储新数据Ar[2][3] = "New Text"
  3. 从云端获取价值var x = Ar[2][3]

希望你能帮忙

谢谢K

【问题讨论】:

  • 你有什么问题?另外:您是否阅读过 Firebase 文档,特别是关于为什么数组在分布式系统中通常是一个坏主意的部分 (firebase.com/docs/web/guide/saving-data.html#section-push)?
  • 我知道这个基本的 JSON 结构思想在 Firebase 中的作用。有时你已经定义好了数组。如您所见,我使用一个简单的命令 data.set(Ar); 将整个数组发送到云端。为什么我不能有另一个命令来做相反的事情或拉回所有这些信息?我还注意到 Firebase 会自动将索引号放在数组中的每个同上。索引数组是一种非常快速有效的获取数据的方法。通过给出所有数据名称,您需要进行复杂的名称搜索,而不是只给出一个像 x=Ar[2][3] 这样始终固定的简单索引号

标签: javascript arrays multidimensional-array cloud firebase


【解决方案1】:
var array = [
 ['1','2013','A','Name1','1','1','3','3','1','2','3','4',''],
 ['2','2014','B','Name2','1','2','3','1','1','2','3','5',''],
 ['3','2015','C','Name3','1','2','4','4','1','2','5','4','']
];

var ref = new Firebase('https://xxxx.firebaseio.com/');

ref.set(array);

ref.on('value', function(snapshot) {
  var value = snapshot.val();

  console.log(value);  
  console.log(value[2][3]);
});

上面的输出是:

[["1", "2013", "A", "Name1", "1", "1", "3", "3", "1", "2", "3", "4", ""], 
 ["2", "2014", "B", "Name2", "1", "2", "3", "1", "1", "2", "3", "5", ""], 
 ["3", "2015", "C", "Name3", "1", "2", "4", "4", "1", "2", "5", "4", ""]]
"Name3"

只要数组的任何部分发生变化,value 事件就会再次触发,on('value' 回调将被调用。

如果要更新数组,有两种选择。

array[2][3] = "New Text";
ref.set(array);

这会将整个数组发送到 Firebase。另一种方法是直接在数据库中更新 [2][3] 处的元素:

ref.child(2).child(3).set("Newest Text");

无论您使用这两种方法中的哪一种,都会再次调用on('value' 回调。

查看此 jsbin 以获取代码的工作版本:http://jsbin.com/nawatetuya/edit?js,console

【讨论】:

  • 这很棒,正是我想要的。非常感谢弗兰克
【解决方案2】:

如果您使用 Angular,可以在 Angular Firebase API docs 中回答。

查找 $save$add 以保存数据并将其添加到 Firebase。要从数据库中获取值,您只需分配一个变量,如

var obj = $firebaseObject(ref);

你可以像

一样从变量中获取数据到 DOM

$scope.data = obj;

很简单。

您可以在数据到达工厂或服务内部的 DOM 之前对其进行操作,然后使用控制器获取或呈现信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2018-11-21
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多