遍历数组/类数组/对象中的每一项

100 阅读1分钟
// 遍历数组/类数组/对象中的每一项
var each = function each(obj, callback) {
    var length,
        i = 0,
        item,
        index,
        result,
        keys;
    if (isArrayLike(obj)) {
        length = obj.length;
        for (; i < length; i++) {
            item = obj[i];
            index = i;
            result = callback.call(item, item, index);
            if (result === false) break;
        }
    } else {
        if (obj == null) throw new TypeError('obj not be a null/undefined!');
        keys = Object.keys(obj);
        typeof Symbol !== "undefined" ? keys = keys.concat(Object.getOwnPropertySymbols(obj)) : null;
        length = keys.length;
        for (; i < length; i++) {
            index = keys[i];
            item = obj[index];
            result = callback.call(item, item, index);
            if (result === false) break;
        }
    }
    return obj;
};