javascript - 推送到 Firebase 数组时写入预先确定的节点 ID

标签 javascript arrays loops firebase firebase-realtime-database

以前有人问过这个问题,但是提供的解决方案似乎都没有解决我的问题:

我在 Firebase 上有一个数据数组,我循环遍历这些数据以在我的应用程序中生成内容,使用“for”循环并因此生成一个索引值。这适用于预定的数据集,因为 ID 是简单的数组数字,但是当用户添加一些新数据(使用 push() 添加到数组中)时,firebase 会创建一个唯一的节点键(例如 -KyWRU7RRCE_V1w_OiZx)由于某种原因阻止我的循环工作的新数据集(控制台中没有显示错误)。

如果我转到 firebase 并手动确保新数据集具有数值,循环将再次开始工作。我如何做到这一点,以便当用户将新数据推送到数组时,生成的键是数字?我试过这个:

  // Push new routine to Firebase.
  var firebaseRef = firebase.database().ref();
  var createdExercise = JSON.parse(localStorage.newRoutine);
  $("#save").click(function()
  {
    firebaseRef.child("workouts").key(some_indexed_value).push(createdExercise);
  });

但控制台返回以下错误:Uncaught TypeError: firebaseRef.child(...).key is not a function.

如果它有用,这是我正在使用的循环:

// Initialize Firebase.
firebase.initializeApp(config);
// Reference data.
var dbRef = firebase.database().ref().child("workouts");
// Sync with Firebase in real time.
dbRef.on("value", snap =>
{
  var workouts = snap.val();

  for (var i = 0; i < workouts.length; i++)
  {
    var routine = workouts[i].title;
    var time = 3;
    var exercises = workouts[i].exercises;
    var icons;

    $("#cardList").append(createCards(routine));
  }
});

还有我在 Firebase 上的 JSON 数据的图片:Firebase JSON tree

最佳答案

你的问题的答案是使用 .set() 而不是像这样的 .push()

firebaseRef.child("workouts").child(some_indexed_value).set(createdExercise);

这将使用您的自定义 key 在 workouts 下创建一个节点。

但建议使用push keys 并使用forEach() 方法获取结果,而不是使用for 循环

关于javascript - 推送到 Firebase 数组时写入预先确定的节点 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206229/

相关文章:

两个日期之间的 Javascript 实现天数差异

javascript - Ajax 错误: Failed to load resource: the server responded with a status of 500 (Internal Server Error)

javascript - 是否可以读取 JavaScript 全局/内置对象方法(即 array.filter、.sort)的代码?

java - Stream 方法在内部进行循环?

java Clip 循环不工作

javascript - 服务器如何找到真实的客户端IP地址?

javascript - 从顶部滚动 x 像素后触发函数

c++ - (C++) 有没有办法在循环中创建不同的矩阵?

java - 使用拆分调节器拆分字符串数组

c++ - 如何计算精度为 E=0.0001 的序列 e^(-x) 之和?