Hola, tengo el siguiente código cortado. ( Javascript create Object by array El problema es que esto eliminará mi clave existente, pero quiero mantenerla y actualizarla. Solo si la clave no existe, entonces debería agregarla.
function setValueToLightGroup(Group, keys, value) { let c=Group; keys = keys.split('.'); for (var i=0; i<keys.length-1; ++i) c = c[keys[i]] = {}; c[keys[i]] = value; } setValueToLightGroup(LightGroups[`FlurEG`], 'autoOff.timers.startTimer', 300); setValueToLightGroup(LightGroups[`FlurEG`], 'autoOff.enabled', true); setValueToLightGroup(LightGroups[`FlurEG`], 'power', true);
El problema general es que sobrescribe el valor anterior de c[keys[i]]
en cada iteración del ciclo for
con {}
. Si desea mantener el contenido anterior, solo sobrescriba el contenido si la clave no existe.
for (let i = 0; i < keys.length - 1; i++) { if (!(keys[i] in c)) { // <-- this check avoids that value is overwritten c[keys[i]] = {}; } c = c[keys[i]]; }
Como se indica en los comentarios, una alternativa sería usar ??=
para la tarea. Realiza la asignación si el lado izquierdo no está definido.