@snipsonian/core
Version:
Core/base reusable javascript code snippets
28 lines (27 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const isObject_1 = require("../../is/isObject");
const getPossiblyNestedObjectPropValue_1 = require("../filtering/getPossiblyNestedObjectPropValue");
function updateObjectField({ obj, fieldToUpdateRef, val, }) {
if (!(0, isObject_1.default)(obj)) {
return obj;
}
const lastArraySeparator = fieldToUpdateRef.lastIndexOf('[');
const lastObjSeparator = fieldToUpdateRef.lastIndexOf('.');
const splitIndex = Math.max(lastArraySeparator, lastObjSeparator);
if (splitIndex === -1) {
obj[fieldToUpdateRef] = val;
return obj;
}
const parentRef = fieldToUpdateRef.substring(0, splitIndex);
const remainingRef = fieldToUpdateRef.substring(splitIndex + 1);
const childKey = (splitIndex === lastArraySeparator)
? remainingRef.substring(0, remainingRef.indexOf(']'))
: remainingRef;
const getFieldsFromParentRefRegex = /([^.[\]]+)/g;
const pathParts = parentRef.match(getFieldsFromParentRefRegex);
const parent = (0, getPossiblyNestedObjectPropValue_1.default)(obj, ...pathParts);
parent[childKey] = val;
return obj;
}
exports.default = updateObjectField;