Javascript 获取当前JSON节点的完全限定名
给定一个Javascript对象,如何遍历每个属性并获得每个节点的完全限定名?我正在尝试这样的事情:Javascript 获取当前JSON节点的完全限定名,javascript,json,Javascript,Json,给定一个Javascript对象,如何遍历每个属性并获得每个节点的完全限定名?我正在尝试这样的事情: var test = { "axes" : [{ "stackType": "100%", "testObject": { "testProperty": "found" }, "minimum": 0 }, { "gridColor": "#test",
var test = {
"axes" : [{
"stackType": "100%",
"testObject": {
"testProperty": "found"
},
"minimum": 0
}, {
"gridColor": "#test",
"testArray": [
{"jelly": 2}, {"jam": 3}
],
"gridAlpha": 1
}]
};
iterate(test);
function iterate(obj, parents) {
if(!parents) { var parents = []; }
for (var property in obj) {
parents.push(property);
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object") {
iterate(obj[property], parents);
}
else if (obj[property].constructor == Array) {
for (var i = 0; i < obj[property].length; i++) {
iterate(obj[property][i], parents);
}
}
else {
console.log(parents + " : " + obj[property]);
}
}
}
}
axes, 0, stackType : 100%
axes, 0, testObject, testProperty : found
axes, 0, minimum : 0
axes, 1, gridColor: #test
axes, 1, testArray, 0, jelly: 2
axes, 1, testArray, 1, jam: 3
axes, 1, gridAlpha: 1
但是,我只是添加了每个新属性,列表永远不会重置。在循环中,您需要创建传入的
父数组的副本,并将属性添加到该数组中,然后在递归调用中传递该属性。否则,您只是在修改相同的数组
var测试={
“轴”:[{
“stackType”:“100%”,
“testObject”:{
“testProperty”:“已找到”
},
“最小值”:0
}, {
“gridColor”:“测试”,
“测试阵列”:[{
“果冻”:2
}, {
“果酱”:3
}],
“gridAlpha”:1
}]
};
迭代(测试);
函数迭代(对象,父对象){
如果(!父母){
var父项=[];
}
for(obj中的var属性){
//更改行:
var path=[].concat(父级,属性);
if(对象hasOwnProperty(财产)){
if(对象类型[属性]=“对象”){
迭代(obj[property],path);//已更改
}else if(obj[property].constructor==Array){
对于(var i=0;i
嘿,谢谢。这很有效。我尝试了类似的方法,但我认为我的问题是将缓冲区变量(path)放在for循环之外。这也不是我需要的解决方案,因为我问错了问题。如果我给了您上下文(我需要合并两个对象),您可能会告诉我,我可以保存迭代并使用jQuery的$.extend,如下所示:$.extend(true,object1,object2);使用true使合并递归。我将此标记为答案,但记下此笔记,以防有人发现此答案试图解决与我相同的问题。