Js练笔——用循环和递归实现追踪对象深度(循环引用关系不考虑)
function reobs(obj){ //返回对象中对象属性组成的数组
var a=[];
var b=[];
for(it in obj){
a.push(it);
}
for(var i=0;i<a.length;++i){
if(typeof(obj[a[i]])=="object"){
b.push(obj[a[i]]);} //将将对象数组存起来
}
return b; //返回对象属性组成的数组
}
function oql(obj){
var a=[]; //存放对象层级属性的数组
var count=1; //计数
a=reobs(obj); //第一层属性对象数组
while(a.length>0){ //如果存在对象属性
count++;
var b=[];
for(var i=0;i<a.length;i++){
b=b.concat(reobs(a[i]));
}
a=b;
}
return count;
}
//递归实现
var count=1;
function qlOb(items){
var a=[];
for(var i=0;i<items.length;++i){
a=a.concat(reobs(items[i]));
}
if(a.length==0){return count;}
else{
count++;
return qlOb(a);
}
}
var b={
name:{a1:1,a2:2,a3:{pro11:11}},
age:18,
hobby:"足球",
pro4:{pro5:{pro7:3,pro8:{pro9:9,pro10:{pro11:10}}}}
}
var c={
pro1:[{a1:1},{a2:2},{a3:3},{a4:{a5:5}}]
}
console.log(oql(b)); //5
console.log(oql(c)); //4
Js练笔——用循环和递归实现追踪对象深度(循环引用关系不考虑)的更多相关文章
- Python对象的循环引用问题
目录 Python对象循环引用 循环引用垃圾回收算法 容器对象 生成容器对象 追踪容器对象 结束追踪容器对象 分代容器对象链表 何时执行循环引用垃圾回收 循环引用的垃圾回收 循环引用中的终结器 pyt ...
- [Effective JavaScript 笔记]第64条:对异步循环使用递归
假设需要有这样一个函数,接收一个URL的数组并尝试依次下载每个文件直到有一个文件被成功下载.如果API是同步的,使用循环很简单实现. function downloadOneSync(urls){ f ...
- HTML-JS 循环 函数 递归
[循环结构的执行步骤] 1.声明循环变量 2.判断循环条件 3.执行循环体操作 4.更新循环变量 然后,循环执行2-4,直到条件不成立时,跳出循环. while循环()中的表达式,运算结果可以是各种类 ...
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 1.1. 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. ...
- codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题
12.10高一练习题 1.要求: 这周回顾复习的内容是循环.递归.stl. 不要因为题目简单就放弃不做,现在就是练习基础. 2.练习题: (1)循环 题目解析与代码见随笔分类 NOI题库 htt ...
- 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别
表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...
- 【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了, ...
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...
- leetcode 326. Power of Three(不用循环或递归)
leetcode 326. Power of Three(不用循环或递归) Given an integer, write a function to determine if it is a pow ...
随机推荐
- Google自己的下拉刷新组件SwipeRefreshLayout
SwipeRefreshLayout SwipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support librar ...
- pythonpython-eggs异常解决方法
: UserWarning: /home/server/.python-eggs is writable by group/others and vulnerable to attack when u ...
- css的重置和原子类的使用
@charset "utf-8";/* Reset Definitions*/body, div, p, a, ul, ol, li, dl, dt, dd, h1, h2, h3 ...
- SU susort命令学习
- 学好 Python 的 11 个优秀资源【转载】
Python是目前最流行.最易学最强大的编程语言之一(学习Python的五大理由),无论你是新手还是老鸟,无论是用于机器学习还是web开发(Pinterest就是案例),Python都是一件利器.此外 ...
- PHP 批量修改图片的名字
<?php // glob() 返回指定目录下的文件名以及目录 $arr = glob("img/*.jpg"); $time = time(); $i = 100001; ...
- PHP历程(封装的增删改查方法)
db.class.php 主要方法 <?php /** * 数据库配置信息 */ define('DB_HOST','127.0.0.1'); //服务器 define('DB_USER', ...
- UVa1212 Duopoly(最小割)
题目大概说有两家通讯公司,它们分别有几个投标,投标各有价值且各个投标都包含几个频道,相同公司的各个投标包含频道都是互不相同的,而频道不能被同时选用.问怎么选择采取哪家公司哪些投标使得价值最大. 如此建 ...
- HDU2191(多重背包)
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> ...
- Oracle错误 ORA-12560如何解决
造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:1.监听服务没有起起来.windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板, 启动oracleh ...