@chakra-ui/react
Version:
Responsive and accessible React UI components built with React and Emotion
37 lines (34 loc) • 1.05 kB
JavaScript
import { isObject } from './is.js';
const isNotNullish = (element) => element != null;
function walkObject(target, predicate, options = {}) {
const { stop, getKey } = options;
function inner(value, path = []) {
if (isObject(value) || Array.isArray(value)) {
const result = {};
for (const [prop, child] of Object.entries(value)) {
const key = getKey?.(prop, child) ?? prop;
const childPath = [...path, key];
if (stop?.(value, childPath)) {
return predicate(value, path);
}
const next = inner(child, childPath);
if (isNotNullish(next)) {
result[key] = next;
}
}
return result;
}
return predicate(value, path);
}
return inner(target);
}
function mapObject(obj, fn) {
if (Array.isArray(obj)) return obj.map((value) => fn(value));
if (!isObject(obj)) {
if (obj !== null && obj !== void 0) return fn(obj);
else return obj;
}
return walkObject(obj, (value) => fn(value));
}
export { mapObject, walkObject };
;