Object对象深度遍历
支持Object和Array混合型对象遍历。其中用到的对象类型判断方法,详见《JavaScript中Object对象类型判断》
// 递归实现
// obj 为父级 初始值可以传null
// object 为要遍历的对象
// process 为递归遍历处理方法
// path 为object的父级完整路径 初始可以不传
export const objectMap = (obj, object, process, path) => {
let keyPath = [];
if (isArray(path)) keyPath = [...path];
let go;
if (isArray(keyPath) && keyPath.length)
go = process(obj, object, keyPath[keyPath.length - 1], keyPath);
else go = process(obj, object, null, []);
if (!go) {
if (isObject(object))
for (let key in object) {
go = objectMap(object, object[key], process, [...keyPath, key]);
if (go === "break") break;
}
else if (isArray(object))
for (let key = 0; key < object.length; key++) {
go = objectMap(object, object[key], process, [...keyPath, key]);
if (go === "break") break;
}
}
return go;
};