Заполнить оставшийся индекс массива нулем на основе указанной длины

#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)