Вы совсем не за горами. вычисляемые свойства (или просто установка имени свойства после создания объекта).Вы можете сделать вычисленное имя свойства, используя [expression]
в левой части :
в инициализаторе свойства.
Я бы сделал это с map
:
const headArray=['Online & Open Alarms','Sites Overview','Active Alarms','Hidden Alarms'];
const dashboardstatus = {hideDashboard1:true,closeDashboard1:false,hideDashboard2:true,closeDashboard2:true,hideDashboard3:false,closeDashboard3:false,hideDashboard4:false,closeDashboard4:false}
const dashArray = headArray.map((name, index) => {
const hide = "hideDashboard" + (index + 1);
const close = "closeDashboard" + (index + 1);
return {
[name]: {[hide]: dashboardstatus[hide], [close]: dashboardstatus[close]}
};
});
console.log(dashArray);
.as-console-wrapper {
max-height: 100% !important;
}
Обратите внимание, что вычисленные имена свойств являются новыми (ish) по состоянию на ES2015.До ES2015 сначала нужно было создать объект, а затем добавить свойства.Тело обратного вызова map
будет выглядеть следующим образом:
const hide = "hideDashboard" + (index + 1);
const close = "closeDashboard" + (index + 1);
const obj = {};
const value = {};
value[close] = dashboardstatus[close];
value[hide] = dashboardstatus[hide];
obj[name] = value;
return obj;
Но если вы не хотите использовать map
, вот версия с минимальными изменениями в существующем коде:
const headArray=['Online & Open Alarms','Sites Overview','Active Alarms','Hidden Alarms'];
const dashboardstatus = {hideDashboard1:true,closeDashboard1:false,hideDashboard2:true,closeDashboard2:true,hideDashboard3:false,closeDashboard3:false,hideDashboard4:false,closeDashboard4:false}
const dashArray = [];
// Note that you had $scope.headingArray, not $scope.headArray, but you showed
// $scope.headArray when showing the array's contents
for (var i = 0; i < headArray.length; i++) {
const close = 'closeDashboard' + (i + 1); // <== Note the + before (i + 1) to do string
const hide = 'hideDashboard' + (i + 1); // concatenation, was missing from one of yours
dashArray.push({
[headArray[i]]: // <== computed property name, note : not , after it
{
[close]: dashboardstatus[close], // <== Another computed property name
[hide]: dashboardstatus[hide] // <== And another
}
});
}
console.log(dashArray);
.as-console-wrapper {
max-height: 100% !important;
}
И снова, до ES2015, вам сначала нужно было создать объект, а затем добавить свойства.Тело цикла for
будет выглядеть следующим образом:
const close = 'closeDashboard' + (i + 1);
const hide = 'hideDashboard' + (i + 1);
const obj = {};
const value = {};
value[close] = dashboardstatus[close];
value[hide] = dashboardstatus[hide];
obj[headArray[i]] = value;
dashArray.push(obj);
Тем не менее, вы можете захотеть пересмотреть свою структуру.Очевидно, невозможно сказать наверняка, не зная больше (что выходит за рамки вашего первоначального вопроса), но эта структура выглядит так, как будто она может быть более сложной, чем могла бы быть.