2

私はこのような配列を持っています

a=[
[1,6,6,8,0], 

[7,3,2,6],


[7,3,2]

] 

ここでは、内側の配列の最大長を見つける必要があります。そして、その他を「0」に置き換える必要があります。

たとえば、最初の配列には最大長である 5 つの要素があるため、最大長 (つまり 5) に達するまで、2 番目と 3 番目の配列に「0」を入れる必要があります。ここで何をすべきですか?

4

3 に答える 3

6
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;
});

http://jsfiddle.net/Mgfnf/1/

于 2013-06-24T05:59:16.353 に答える
3

あなたが言ったように、あなたの仕事は2つに分かれています:

  1. 配列の最大長を見つける
  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);
    }
}

以上です。

于 2013-06-24T06:12:18.980 に答える
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++;
}
于 2013-06-24T06:08:00.937 に答える