2

我有一个像这样的数组

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

[7,3,2,6],


[7,3,2]

] 

在这里,我需要找到内部数组的最大长度。我需要用'0'替换其他。

例如,第一个数组有 5 个元素,这是最大长度,所以我需要将“0”放入第二个和第三个数组,直到达到最大长度(即 5)。我应该在这里做什么?

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

正如您所说,您的任务分为两个:

  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

try this

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 回答