UNPKG

@snipsonian/core

Version:

Core/base reusable javascript code snippets

25 lines (24 loc) 1.08 kB
import isObject from '../../is/isObject'; import getPossiblyNestedObjectPropValue from '../filtering/getPossiblyNestedObjectPropValue'; export default function updateObjectField({ obj, fieldToUpdateRef, val, }) { if (!isObject(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 = getPossiblyNestedObjectPropValue(obj, ...pathParts); parent[childKey] = val; return obj; }