当前位置:  开发笔记 > 编程语言 > 正文

Firebase.update失败:第一个参数包含属性中的undefined

如何解决《Firebase.update失败:第一个参数包含属性中的undefined》经验,为你挑选了2个好方法。

我有一个简单的Firebase功能,可以更新一些数据.但是,解释器说第一个参数在属性"users.tester1"中包含"undefined".有人可以帮帮我吗?

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; ++i)
      rv[arguments[i]] = rv[arguments[i+1]];
    return rv;
}

    addUser("tester1", []);

var addUser = function(name, edges){
  if(!checkIfUsernameExists(name) && !checkIfNodeNameExists(name) && !checkIfEdgeNameExists(name)){
    var time = Firebase.ServerValue.TIMESTAMP;

    //HERE: I think the error is on this line 
    refs.users.update(objify(name, "filler"));

    refs.users.child(name).set({
      "id" : time,
      "edges" : "filler"
    });
    refs.users.child(name).child("edges").update({
      "to" : "filler",
      "from" : "filler"
    });

    addNode(new Node(name, time, name));

    for(var e in edges){
      refs.users.child(name).child("edges/to").update(objify(edges[e].name, true));
      addEdge(new Edge(edges[e].name, time, edges[e].to, edges[e].arrows));
      //TODO add a "from" edge so that you know who wants to eat you
    }
    refs.users.child(name).child("edges/to").set({"filler" : null});
  } else {
    alert("user/node/edge name taken.");
  }
};

Frank van Pu.. 41

将对象传递给Firebase时,属性的值可以是值或null(在这种情况下,属性将被删除).他们不能undefined,这是你根据错误传递的.

只需单独运行此代码段即可显示问题:

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; ++i)
      rv[arguments[i]] = rv[arguments[i+1]];
    return rv;
}
objify("name", "filler")

结果是:

{name:undefined,filler:undefined}

我最好的选择是你希望将键/值对传递objify为偶数/奇数参数.在这种情况下,您要将功能更改为:

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; i+=2)
      rv[arguments[i]] = arguments[i+1];
    return rv;
}
objify("name", "filler")

结果是:

{name:"填充"}


小智.. 18

要确保您的对象不包含任何未定义的道具,请使用以下简单方法:

JSON.parse( JSON.stringify(YourJsonData ) )

有关更多信息,请查看此代码:http://codepen.io/ajmueller/pen/gLaBLX



1> Frank van Pu..:

将对象传递给Firebase时,属性的值可以是值或null(在这种情况下,属性将被删除).他们不能undefined,这是你根据错误传递的.

只需单独运行此代码段即可显示问题:

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; ++i)
      rv[arguments[i]] = rv[arguments[i+1]];
    return rv;
}
objify("name", "filler")

结果是:

{name:undefined,filler:undefined}

我最好的选择是你希望将键/值对传递objify为偶数/奇数参数.在这种情况下,您要将功能更改为:

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; i+=2)
      rv[arguments[i]] = arguments[i+1];
    return rv;
}
objify("name", "filler")

结果是:

{name:"填充"}



2> 小智..:

要确保您的对象不包含任何未定义的道具,请使用以下简单方法:

JSON.parse( JSON.stringify(YourJsonData ) )

有关更多信息,请查看此代码:http://codepen.io/ajmueller/pen/gLaBLX

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有