x将是通过对服务器的ajax调用检索的json对象,并将包含不同的对象名称,具体取决于我需要经历的名称并完成不同的操作。
我想知道我是否可以访问对象键并使用开关或其他方法根据对象名称执行操作,json对象是动态的,因此我认为切换最好覆盖每个场景。< / p>
JSON
x = {
"a": {
"name": "john",
"age": "53",
"more": "foo"
},
"b": {
"test": "testing",
"x": "c",
"z": "b"
},
"c": {
"foo": "testing",
"bar": "2",
"more": "lol"
}
}
示例切换使用上面的json
switch (x)
{
case 'a':
var name = a['name']; // should equal john, need the correct way of doing this
break;
case 'b':
var x = b['x']; // would equal c
break;
}
答案 0 :(得分:1)
你可以迭代
for (var key in x) {
switch (key) {
case 'a':
var name = x[key]['name'];
break;
case 'b':
var _x = x[key]['x'];
break;
}
}
或只检查某些属性
for (var key in x) {
if ('name' in x[key]) var name = x[key]['name'];
if ('test' in x[key]) var test = x[key]['test'];
}
答案 1 :(得分:1)
创建另一个对象并命名方法的方式与x
对象中的键相同:
var obj = {}
var x = {
"a": {
"name": "john",
"age": "53",
"more": "foo"
},
"b": {
"test": "testing",
"x": "c",
"z": "b"
},
"c": {
"foo": "testing",
"bar": "2",
"more": "lol"
}
}
var methods = {
"a": function(a) { obj.name = a.name },
"b": function(b) { obj.y = b.x },
"c": function(c) { ... }
}
for(var key in x) {
if (methods.hasOwnProperty(key))
methods[key](x[key])
}
答案 2 :(得分:0)
这是不可能的 - 至少不是以switch
概述的方式。我建议使用标准if
条件来测试x
对象中是否存在该属性,然后从中检索所需信息。
这样的事情:
if (x["a"]) {
var name = x["a"]["name"];
// do something...
}
else if (x["b"]) {
var y = x["b"]["x"];
// do something...
}
答案 3 :(得分:0)
我不会在for循环中使用开关。可能的属性名称集似乎有限,定义明确并且为您所知,所以您可以通过它们:
var x = {…};
if ("a" in x) {
var name = x.a.name;
// do the "name" action
}
if ("b" in x)
var _x = x.b.x;
// do the "x" action
}
…
答案 4 :(得分:0)
试试这个(模式)
var props = function(prop, queryprop) {
var queryprop = new RegExp(/john|c/);
if ( queryprop.test(prop) ) {
console.log(prop);
};
return !prop
};
x = {
"a": {
"name": "john",
"age": "53",
"more": "foo"
},
"b": {
"test": "testing",
"x": "c",
"z": "b"
},
"c": {
"foo": "testing",
"bar": "2",
"more": "lol"
}
};
$.each(x, function(index, value, _props) {
var _props = ["a", "b"];
if (index === "a") { var name = value.name; props(name); };
if (index === "b") { var x = value.x; props(x); };
return _props[index] != index;
});