私はこのような配列を持っています
a=[
[1,6,6,8,0],
[7,3,2,6],
[7,3,2]
]
ここでは、内側の配列の最大長を見つける必要があります。そして、その他を「0」に置き換える必要があります。
たとえば、最初の配列には最大長である 5 つの要素があるため、最大長 (つまり 5) に達するまで、2 番目と 3 番目の配列に「0」を入れる必要があります。ここで何をすべきですか?
私はこのような配列を持っています
a=[
[1,6,6,8,0],
[7,3,2,6],
[7,3,2]
]
ここでは、内側の配列の最大長を見つける必要があります。そして、その他を「0」に置き換える必要があります。
たとえば、最初の配列には最大長である 5 つの要素があるため、最大長 (つまり 5) に達するまで、2 番目と 3 番目の配列に「0」を入れる必要があります。ここで何をすべきですか?
var max = Math.max.apply(null, a.map(function(i) {
return i.length;
}));
var new_arr = a.map(function(i) {
var pad = max - i.length;
while (pad--) {
i.push(0);
}
return i;
});
あなたが言ったように、あなたの仕事は2つに分かれています:
#1 と #2 の両方は、外側の配列を介した単純なループによって実現できます。maxLength
最初に、最大長を保持する変数 ( と呼びましょう) を保持します。
var maxLength = 0;
//walk through the array
for (var i = 0; i < a.length; i += 1) {
//choose the larger
maxLength = Math.max(maxLength, a[i].length);
}
拡張したいサイズが得られたので、外側のループを調べ、各サブ配列でpush
、長さが一致するまで 0 にします。
//walk through the array
for (var j = 0; j < a.length; j += 1) {
//the length will increase by 1 on each push
while (a[j].length < maxLength) {
a[j].push(0);
}
}
以上です。
これを試して
var i = 0,
max = 0;
while(i<a.length){ // find max
max = a[i].length > max ? a[i].length : max;
i++;
}
i = 0;
while(i<a.length){
for(var j=a[i].length;j<max;j++){
a[i][j] = 0;
}
i++;
}