无法访问Javascript中的对象字段

时间:2015-11-06 15:26:33

标签: javascript

我试图处理在JSON中传递给网页的对象,甚至无法访问其中的字段。 对象的格式为

@Optional

这是我的功能:

{  
   "tag":{  
      "edges":{  
         "start1":"end1",
         "start2":"end2"
      },
      "nodes":[  
         "node1",
         "node2"
      ]
   }
}

然而,当我将对象传递给函数时,我无法到达字段function processSimilarMap(obj){ for(var o in obj){ if(obj.hasOwnProperty(o)){ var k=obj[o]; var nodes=k.nodes;//cannot find the field here console.log(nodes); var edges=k.edges;//cannot find the field here console.log(edges); for(var i=0;i<nodes.length;i++){ //do something } for(var e in edges){ if(edges.hasOwnProperty(e)){ //do something } } } } } k.nodes。日志显示他们只是k.edges。我尝试使用undefined,但它也没有帮助。我在这做错了什么?

很抱歉提出这样一个低级别的问题,但是由于对象和地图的格式相同(如果我错了,请纠正我)。是否有更简单,更优雅的方式,就像&#34; object.attribute&#34;处理对象而不是循环所有可能的属性(字段)并找到那些&#34;自己的属性&#34;?

提前致谢!

2 个答案:

答案 0 :(得分:1)

似乎正在工作,也许你没有将Json字符串解析为对象?

var myJson = '{"tag":{"edges":{"start1":"end1","start2":"end2"},"nodes":["node1","node2"]}}';
processSimilarMap(JSON.parse(myJson));

FIDDLE

答案 1 :(得分:1)

这似乎对我有用:http://jsfiddle.net/d01Lxcgm/

var obj = {
    "tag": {
        "edges": {
            "start1": "end1",
            "start2": "end2"
        },
        "nodes": ["node1", "node2"]
    }
};

如果它只是一个JSON字符串,你确定要解析它吗?(我为问这么愚蠢的问题而道歉但只是先检查最简单的选项)你确定你调用了函数并传递了正确的对象吗?至于更优雅的方式。如果此对象是动态循环属性,则最好的方法是确保始终处理所有内容。如果您知道对象的结构将始终相同,那么您可以使用点表示法访问它。

    var tag = obj.tag;
    var nodes = tag.nodes;
    var edges = tag.edges;
    for (var i = 0; i < nodes.length; i++) {
        // do something with nodes
    }
    for (var e in edges) {
        if (edges.hasOwnProperty(e)) {
            // do something with edges
        }
    }

当然,你可以像你在问题中所说的那样进行数组访问:

obj['tag'];