У меня есть JavaScript объект с некоторыми вложенными свойствами, который я хочу обновить в зависимости от некоторых условий. Начальным объектом может быть что-то вроде:
const options = {
formatOption: {
label: 'Model Format',
selections: {
name: 'Specific Format',
value: '12x28',
}
},
heightOption: {
label: 'Model Height',
selections: {
name: 'Specific Height',
value: '15',
}
}
};
Я нашел решение, использующее Object.keys
, reduce
и оператор распространения, но я хотел бы знать, является ли это лучшим / более краткий путь на сегодняшний день или, если есть лучший способ. Я ищу не самый эффективный вариант, а «лучшую практику» (если она есть) или более элегантный способ.
РЕДАКТИРОВАТЬ 30/01/20
Как указано в комментариях @ CertainPerformance мой код изменял исходную переменную параметров, поэтому я изменяю линия const option = options[key];
до const option = { ...options[key] };
. Я надеюсь, что это правильно, и что функция не изменяет исходные данные.
const newObject = Object.keys(options).reduce((obj, key) => {
const option = { ...options[key] };
const newVal = getNewValue(option.label); // example function to get new values
// update based on existence of new value and key
if (option.selections && option.selections.value && newVal) {
option.selections.value = newVal;
}
return {
...obj,
[key]: option,
};
}, {});
getNewValue
- это придуманное имя для функции, которую я вызываю, чтобы получить «обновленную» версию значение, которое я смотрю Чтобы воспроизвести мою ситуацию, вы можете просто заменить строку const newVal = getNewValue(option.label);
на const newVal = "bla bla";