/*each
* _each:遍历数组、类数组、对象中的每一项
* @params
* obj:需要迭代的数组、类数组、普通对象
* callback:回调函数(每遍历数组中的某一项,就会把回调函数执行一次;而且需要把当前遍历的内容和索引[属性值和属性名]传给回调函数;接收回调函数的返回结果,如果是false,则结束当前的循环,如果是其它值,让返回的值替换数组中的当前项,如果没有返回值,则什么都不处理...)
* context:传递的第三个参数,可以改变回调函数中的THIS指向,不传递默认是window
* @return
* 返回一个新的数组或者对象(原来的数组或者对象不变)
*/
function _each(obj, callback, context = window) {
let isLikeArray = _type.isArray(obj) || (('length' in obj) && _type.isNumeric(obj.length));
typeof callback !== "function" ? callback = Function.prototype : null;
//=>数组或者类数组
if (isLikeArray) {
let arr = [...obj];
for (let i = 0; i < arr.length; i++) {
let item = arr[i],
result = callback.call(context, item, i);
if (result === false) break;
if (typeof result === "undefined") continue;
arr[i] = result;
}
return arr;
}
//=>对象的处理
let opp = {
...obj
};
for (let key in opp) {
if (!opp.hasOwnProperty(key)) break;
let value = opp[key],
result = callback.call(context, value, key);
if (result === false) break;
if (typeof result === "undefined") continue;
opp[key] = result;
}
return opp;
}
4. 手写Each
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Given a binary treestruct TreeLinkNode {TreeLinkNode *lef...