Только ли цикл For-In для создания объекта со свойствами или есть лучший подход? Я хочу создать объект вместо массива.
В настоящее время он выполняет цикл data.Batch с использованием цикла for-in и выполняет некоторые общие вычисления и сопоставление свойств.
Например:
let data = {
Batch: {
111: { BatchId: 111, Name: "Batch 1", Count2017: 100, Count2018: 100 },
222: { BatchId: 222, Name: "Batch 2", Count2017: 200, Count2018: 300 }
}
};
function calculateBatch(batch) {
mappedObject = {};
let grandTotal = 0;
for (const batchId in data.Batch) {
let total = data.Batch[batchId].Count2017 + data.Batch[batchId].Count2018;
mappedObject[batchId] = {
BatchId: batchId,
Name: data.Batch[batchId].Name,
Total: total
};
grandTotal += total
}
return {
Batch: mappedObject,
GrandTotal: grandTotal
}
}
console.info(calculateBatch(data.Batch));Ваш вопрос очень расплывчатый. Опишите, пожалуйста, четкими предложениями.
Вы можете захотеть найти объект уменьшить
Пфф, есть как минимум полдюжины способов создать объект.
Что вы определяете как «лучше»? Если было бы «быстрее», значит, быстрее всех. Если это будет самый короткий или самый большой стиль функциональное программирование, тогда есть альтернативы.
Вы забыли объявить mappedObject как локальную переменную с var (или let или const)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Object.keys() для получения массива имен свойств, а затем .reduce() для создания объекта результата:
return Object.keys(batch).reduce(function(result, key) {
let total = batch[key].Count2017 + batch[key].Count2018;
result.Batch[key] = {
BatchID: key,
Name: batch[key].Name,
Total: total
};
result.GrandTotal += total;
return result;
}, { Batch: {}, GrandTotal: 0 });
"Лучше" ли это, чем ваш опубликованный код, - это субъективно. Это немного короче; делает ли это более читабельным, поддерживаемым или менее? Разные люди дадут разные ответы.
Что касается производительности, почти любой простой итеративный подход будет таким же быстрым, как и другой для любого практического приложения. Если у вас есть миллионы этих пакетов, то ничто не сделает итерацию «быстрой» в абсолютном смысле.
Я не говорю о самом быстром, я говорю о ремонтопригодном и удобочитаемом.
@ Я-вернусь, не могли бы вы указать это в вопросе? Сейчас об этом не говорится. «Лучше» может означать многое.
@ Я-вернусь, конечно, это вопрос стиля, и ты должен учитывать свои собственные предпочтения.
Я бы сказал, что «легко читается» - это довольно субъективный показатель. Когда я был менее опытен в информатике в целом, для меня легко читать было все, что я мог легко понять во время чтения. Это было для циклов и изменяемого назначения и переназначения переменных. Сегодня я считаю, что примеры чисто функционального программирования легче читать и легче понимать. Забавно, это.
TBH, я не думаю, что reduce короче, поскольку обычно требуется дополнительный оператор return. В остальном просто разное форматирование.
Это лучший (самый быстрый) подход, хотя может показаться, что ваша структура данных
batchможет бытьArrayвместоObject, поскольку нет смысла иметь Ключи, если вы действительно их не используете.