转动控制台/打印中的数字

时间:2017-10-13 09:14:15

标签: javascript angularjs arrays

我以这种形式在控制台中获取数据

0:(8) [70, 61, 74, 79, 76, 63, 51, 51]
1:(4) [64, 84, 84, 66]
2:(2) [79, 69]
3:(3) [77, 100, 98]

我想在控制台中打印我的数据:

0:(4) [70, 64, 79,  77]
1:(4) [61, 84, 69, 100]
2:(4) [74, 84,  0,   0]
3:(4) [79, 66, 98,   0]
4:(4) [76,  0,  0,   0]
5:(4) [63,  0,  0,   0]
6:(4) [51,  0,  0,   0]
7:(4) [51,  0,  0,   0]

使用这两个函数,我得到行中的最大数字,我用0填充空列,但我想显示像我写的示例中的数据。

function fillWithZeros(arr, length) {
for (var i = 0; i < length; i++) {
    if (arr[i] == null) {
        arr[i] = 0;
    }
}

return arr;
};
function findMaxEvents(item){
var maxNumEvents = 0;
for (var i = 0; i < item.length; i++){
    if (item[i] > maxNumEvents){
        maxNumEvents = item[i];
    }
}

return maxNumEvents;
}

3 个答案:

答案 0 :(得分:1)

我希望您实际上正在寻找转置现有数组。 感谢Transposing a 2D-array in JavaScript.

获得的答案与您的答案略有不同。希望这有助于尝试找到达到目标的正确方法。

&#13;
&#13;
var array = [[70, 61, 74, 79, 76, 63, 51, 51], 
[64, 84, 84, 66], 
[79, 69], 
[77, 100, 98]];

var arrayWithMaxlen = array.map(function(a){return a.length;}).indexOf(Math.max.apply(Math, array.map(function(a){return a.length;})));
console.log("arrayWithMaxlen : " +arrayWithMaxlen); //gets index of array with max length

var newArray = array[arrayWithMaxlen].map(function(col, i) { 
  return array.map(function(row) { 
    if(row[i]!=undefined)return row[i];
    else return 0;
  })
});

console.log(newArray);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您所描述的操作基本上是一个简单的矩阵转置。有很多方法可以做到这一点。这是另一种选择:

var array = [
  [70, 61, 74, 79, 76, 63, 51, 51],
  [64, 84, 84, 66],
  [79, 69],
  [77, 100, 98]
];

function transpose(arr){
  var largest = arr.reduce(function(max, i){ return max.length > i.length ? max : i; }, []);
  return largest.map(function(col, i){
    return arr.map(function(row){
      return row[i] || 0;
    });
  });
}

console.log(transpose(array));

答案 2 :(得分:0)

只需转置它。

BTW,接受的答案确实依赖于第一个内部数组长度。如果它比其他所有更大的指数都更短了。

&#13;
&#13;
var array = [[70, 61, 74, 79, 76, 63, 51, 51], [64, 84, 84, 66], [79, 69], [77, 100, 98]],
    result = array.reduce(function (r, a, i) {
        a.forEach(function (b, j) {
            r[j] = r[j] || Array.apply(null, { length: array.length }).map(function () { return 0; });
            r[j][i] = b;
        });
        return r;
    }, []);

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;