Перебирайте столбцы cols один за другим, добавляя пробелы к каждой строке, пока в них не будет достаточно символов, чтобы соответствовать position
(вы можете сделать это кратко, вызвав padEnd
с пробелом), затем добавьте метку :
const header = {
"columns": {
"col1": {
"label": [ "Col1Row1", "Col1Row2" ],
"width": 12,
"position" : 10
},
"col2": {
"label": ["Col2Row1", "Col2Row2", "Col2Row3"],
"width": 9,
"position" : 23
}
}
};
const arr = [];
for (const { label, position } of Object.values(header.columns)) {
label.forEach((labelStr, i) => {
arr[i] = (arr[i] || '').padEnd(position, ' ') + labelStr;
});
}
console.log(arr);
Хотя они и есть в вашем примере, если столбцы не упорядочены, вам придется сначала отсортировать их:
const header = {
"columns": {
"col1": {
"label": [ "Col1Row1", "Col1Row2" ],
"width": 12,
"position" : 10
},
"col2": {
"label": ["Col2Row1", "Col2Row2", "Col2Row3"],
"width": 9,
"position" : 23
}
}
};
const arr = [];
for (const { label, position } of Object.values(header.columns).sort((a, b) => a.position - b.position)) {
label.forEach((labelStr, i) => {
arr[i] = (arr[i] || '').padEnd(position, ' ') + labelStr;
});
}
console.log(arr);
Хотя это не проблема для вашего примера, если какая-либо из меток слишком велика для размещения в столбце, отрежьте конец последнего arr[i]
:
const header = {
"columns": {
"col1": {
"label": [ "Col1Row1xxxxxxxxxxxxxxxxxxxxxxx", "Col1Row2" ],
"width": 12,
"position" : 10
},
"col2": {
"label": ["Col2Row1", "Col2Row2", "Col2Row3"],
"width": 9,
"position" : 23
}
}
};
const arr = [];
for (const { label, position } of Object.values(header.columns).sort((a, b) => a.position - b.position)) {
label.forEach((labelStr, i) => {
arr[i] = (arr[i] || '').slice(0, position - 1).padEnd(position, ' ') + labelStr;
});
}
console.log(arr);
(если вы хотите, чтобы метки были такими, если вы хотите, чтобы между метками в этой ситуации был один пробел. Если вы хотите настроить интервал, измените параметр position - 1
до .slice
)