一个数组里有三个对象,每个对象里都有一个数组,但这三个数组不一样长,我希望如果短的数组可以和最长的数组一样长,用最后一个值填充
1、确定最长的数组长度
首先要确定最长的数组长度,可以使用 JavaScript 中的 reduce()
方法找出最长的数组长度:
let arr = [
{ arr: array1 },
{ arr: array2 },
{ arr: array3 }
];
let maxLength = arr.reduce((acc, val) => Math.max(acc, val.arr.length), 0);
这会把 array1
,array2
和 array3
合并为一个数组,并找出它们的最大长度。
2、用最后一个值填充短的数组
接下来,对于那些少于最大长度的数组,使用它们的最后一个值来填充到最大长度。可以使用以下代码来完成:
for (let i = 0; i < arr.length; i++) {
const diff = maxLength - arr[i].arr.length;
if (diff > 0) {
const lastValue = arr[i].arr[arr[i].arr.length - 1];
arr[i].arr.push(...Array(diff).fill(lastValue));
}
}
这个循环遍历了每个对象,如果差距大于 0,就使用 Array()
和 fill()
来填充差距的长度,并使用数组的最后一个值来填充。
最后得到了三个长度相同的数组,可以用循环来同时处理它们:
for (let i = 0; i < maxLength; i++) {
const value1 = arr[0].arr[i];
const value2 = arr[1].arr[i];
const value3 = arr[2].arr[i];
// 处理 value1, value2, value3
}
请注意,如果最长的数组本身为空数组,则 maxLength
为 0,而不是 1。在这种情况下,在第二个步骤中不需要进行额外的填充。