获取表示对象/对象内嵌套对象级别的数字
Getting a number that represents the level of an object/nested object inside an object
考虑以下Javascript对象
var items = [{
content: 'A_lvl0',
}, {
content: 'B_lvl0',
}, {
content: 'C_lvl0',
children: [{
content: 'C_1_lvl1',
}, {
content: 'C_2_lvl1',
children: [{
content: 'C_1_lvl2'
}, {
content: 'C_2_lvl2',
children:[{
content: 'C_1_lvl3'
}, {
content: 'C_2_lvl3'
}]
}]
}, {
content: 'C_3_lvl1'
}]
}];
你在对象的content属性中看到的LVLX x表示对象嵌套的深度,假设我在上面的对象中有一个对象的引用,并且想要返回x的值,即对象嵌套的深度,我知道我必须使用递归,但我不确定如何跟踪顶层的
可以使用以下函数
打印所有对象的嵌套内容var scanObj = function (obj) {
for (var i = 0; i < obj.length; i++) {
console.log(obj[i].content);
if (obj[i].hasOwnProperty('children')) {
scanObj(obj[i].children);
}
}
};
但是现在我要写的是
var getlvlByRef = function (obj,subobject) {
//return lvl
};
var getlvlByPropertyValue = function (obj,propertyname,propertyvalue) {
//return lvl
};
和我的问题是我不知道如何保持跟踪当我到达最后一个嵌套的水平,你能告诉我正确的方式吗?
这里有一个小提琴http://jsfiddle.net/eG3qR/
在这里,我为我的解决方案创建了一个提琴
http://jsfiddle.net/3W5qY/3/function getlvlByPropertyValue(obj, propertyName, propertyValue, level){
if(level == undefined) level = 0;
if(obj == undefined || obj.length == 0) return -1;
for(var i = 0;i < obj.length; i++){
var curObj = obj[i];
if(curObj[propertyName] != undefined && curObj[propertyName] == propertyValue) {
return level;}
if(curObj["children"] != undefined){
var childSearchResult = getlvlByPropertyValue(curObj["children"], propertyName, propertyValue, ++level);
if(childSearchResult > 0) {
return childSearchResult;
}
}
}
return -1;
}
如果没有找到,返回-1
如果你想让scanObj输出当前的关卡,你可以将关卡向下传递给scanObj
:
var scanObj = function (obj, level, init) {
if (level === undefined || init) {
level = 0;
}
for (var i = 0; i < obj.length; i++) {
console.log(obj[i].content);
console.log(level);
if (obj[i].hasOwnProperty('children')) {
scanObj(obj[i].children, level);
}
}
};
scanObj(myObj, 0, true);
可能会被清理,所以你不需要init标志,但这应该打印对象内容以及对象所在的级别。
相关文章:
- 如何按对象反转Angular ngRepeat的顺序's键,这些键是数字键
- 对象获胜'如果qml中的其他地方定义了数字动画属性,则t设置动画
- 更改json/javascript对象var名称或从数字var中检索值
- 按数字而不是按名称选择JSON对象
- 在Javascript中,如何在JSON对象中将1.00表示为数字
- 在JavaScript中,在对象上装箱每个数字和字符串的性能成本是多少
- 获取对象的所有可能组合,其中值的总和与数字匹配
- JavaScript 对象 - 未定义的数字键文字
- 转换为对象的数字
- Javascript:接收对象并返回对象中描述的所有数字的列表的函数
- 在对象数组中将数字相加
- 如何在谷歌可视化api柱状图中使用的json对象内用数字替换字符串值
- 将函数应用于填充有数字的对象
- 如何访问以数字开头的对象属性(语法错误:意外的标识符)
- 当键是数字时,如何在JavaScript中对对象值进行排序
- 如何在具有数字的JSON对象中导航
- 检查布尔值并将其转换为对象中的数字
- 使用带有数字键的对象呈现 _.template
- 从 JavaScript 对象获取值,如果属性的前 8 位数字与参数匹配
- 自动分配对象数字键