Javascript 推送到Firebase阵列时写入预先确定的节点id

Javascript 推送到Firebase阵列时写入预先确定的节点id,javascript,arrays,loops,firebase,firebase-realtime-database,Javascript,Arrays,Loops,Firebase,Firebase Realtime Database,以前有人问过这个问题,但所提供的解决方案似乎都不能解决我的问题: 我在Firebase上有一个数据数组,我使用一个“for”循环,并因此使用一个索引值,在我的应用程序中循环生成内容。这可以很好地处理预定的数据集,因为ID是简单的数组数字,但是当用户添加一些新数据时(通过push()添加到数组中),firebase会为新数据集创建一个唯一的节点键(例如-KyWRU7RRCE_V1w_OiZx),由于某种原因,这会阻止我的循环工作(控制台中没有显示错误) 如果我转到firebase并手动确保新数据集

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

我在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);
  });
但控制台返回以下错误:uncaughttypeerror:firebaseRef.child(…)。键不是函数

如果有用,下面是我正在使用的循环:

// 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。
firebase.initializeApp(配置);
//参考数据。
var dbRef=firebase.database().ref().child(“训练”);
//与Firebase实时同步。
dbRef.on(“值”,捕捉=>
{
var-workouts=snap.val();
对于(var i=0;i

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

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

firebaseRef.child("workouts").child(some_indexed_value).set(createdExercise);
这将使用自定义密钥在“训练”下创建一个节点


但建议使用
按键
并使用
forEach()
方法来获得结果,而不是使用
for loop

SUPER!非常感谢你。