#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть список массивов разной длины. Я хочу найти наибольшую длину массива в списке и сделать все оставшиеся массивы одинаковой длины, заполнив нулевое / пустое значение.
например: у меня есть список массива
[ [1,2,2,4,4], [2,3,2,4], [2,4,21,4], [1,2]];
Я хочу найти наибольшую длину массива в списке, т.е. 5 в приведенном выше случае (длина [1,2,2,4,4]
)
Я хочу, чтобы все оставшиеся массивы также имели одинаковую длину, как показано ниже
[ [1,2,2,4,4], [2,3,2,4,''], [2,4,21,4,''], [1,2,'','','']];
Как я могу этого добиться?
Пример кода списка массива и определение максимальной длины
let data = [ [1,2,2,4,4],
[2,3,2,4], [2,4,21,4], [1,2]
];
const length = Math.max(...(data.map(el => el.length)));
console.log('array list', data);
console.log('max length', length);
Ответ №1:
Вы можете перебирать массив и вставлять пустые строки до нужной длины.
const
data = [[1, 2, 2, 4, 4], [2, 3, 2, 4], [2, 4, 21, 4], [1, 2]],
length = Math.max(...data.map(({ length }) => length));
data.forEach(a => {
while (a.length < length) a.push('');
});
console.log('max length', length);
console.log('array list', data);
Если вы хотите получить новый массив, вы можете сопоставить новые массивы.
const
data = [[1, 2, 2, 4, 4], [2, 3, 2, 4], [2, 4, 21, 4], [1, 2]],
length = Math.max(...data.map(({ length }) => length)),
result = data.map(a => Array.from({ length }, (_, i) => i < a.length ? a[i] : ''));
console.log('max length', length);
console.log('array list', result);
Ответ №2:
Вы можете concat
заполнить массив null
значениями для каждой записи в data
:
let data = [ [1,2,2,4,4],
[2,3,2,4], [2,4,21,4], [1,2]
];
const length = Math.max(...(data.map(el => el.length)));
data = data.map(a => a.concat(new Array(length - a.length).fill(null)));
console.log('array list', data);
console.log('max length', length);
Ответ №3:
let data = [ [1,2,2,4,4],
[2,3,2,4], [2,4,21,4], [1,2]
];
const length = Math.max(...(data.map(el => el.length)));
data.forEach(item => {
while (item.length < length){
item.push('');
}
})
console.log(data)