for循环判断是否相等_递归和循环
递归和循环是编程中重复执行时常见的一对兄弟,因是兄弟,所以也常让人混淆。我是mipwan。这篇文章为大家分享一下递归和循环这对兄弟。递归递归,又称为递回,在前端中,通常指在函数的定义中调用自身的方法。在前端编程中经常遇到。例如下面的这个looseEqual函数,这个函数 是vue2 源码中判断两个对象或者数组是否粗略的认为相等。/*** Check if two values ar...
·
递归和循环是编程中重复执行时常见的一对兄弟,因是兄弟,所以也常让人混淆。
我是mipwan。这篇文章为大家分享一下递归和循环这对兄弟。
递归
递归,又称为递回,在前端中,通常指在函数的定义中调用自身的方法。在前端编程中经常遇到。
例如下面的这个looseEqual函数,这个函数 是vue2 源码中判断两个对象或者数组是否粗略的认为相等。
/** * Check if two values are loosely equal - that is, * if they are plain objects, do they have the same shape? */ function looseEqual (a, b) { if (a === b) { return true } var isObjectA = isObject(a); var isObjectB = isObject(b); if (isObjectA && isObjectB) { try { var isArrayA = Array.isArray(a); var isArrayB = Array.isArray(b); if (isArrayA && isArrayB) { return a.length === b.length && a.every(function (e, i) { return looseEqual(e, b[i]) }) } else if (a instanceof Date && b instanceof Date) { return a.getTime() === b.getTime() } else if (!isArrayA && !isArrayB) { var keysA = Object.keys(a); var keysB = Object.keys(b); return keysA.length === keysB.length && keysA.every(function (key) { return looseEqual(a[key], b[key]) }) } else { /* istanbul ignore next */ return false } } catch (e) { /* istanbul ignore next */ return false } } else if (!isObjectA && !isObjectB) { return String(a) === String(b) } else { return false } }
递归的应用场景还是很多的,例如:寻找对象里的ID值,多个数求和等。总结起来大多数都具有以下特征:
重复做一件事
一个主体
一般按照由外到内的顺序
本次执行依赖上次结果
循环
循环是指重复的执行某个或特定的、有规律的一些操作。
例如 vue2 源码中 将类数组对象转化为真正的数组;将数组对象转换为对象,都用的是循环。
/** * Convert an Array-like object to a real Array. */ function toArray (list, start) { start = start || 0; var i = list.length - start; var ret = new Array(i); while (i--) { ret[i] = list[i + start]; } return ret }
/** * Mix properties into target object. */ function extend (to, _from) { for (var key in _from) { to[key] = _from[key]; } return to } /** * Merge an Array of Objects into a single Object. */ function toObject (arr) { var res = {}; for (var i = 0; i < arr.length; i++) { if (arr[i]) { extend(res, arr[i]); } } return res }
循环是前端编程中最常见的一种方法,应用场景数不胜数。总结有以下几个特点:
需要重复执行某个操作
操作的是一个主体
按照一定的顺序:倒序或者顺序
本次结果不依赖上次
以上就是循环和递归的区别了。祝愿大家都能有所得。
更多推荐
已为社区贡献1条内容
所有评论(0)