Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转动控制台中的数字/打印_Javascript_Angularjs_Arrays - Fatal编程技术网

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

Javascript 转动控制台中的数字/打印,javascript,angularjs,arrays,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:(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;
}
函数fillwithzero(arr,length){
对于(变量i=0;imaxNumEvents){
MaxNumeEvents=项目[i];
}
}
返回最大事件;
}
只需将其转置即可

顺便说一句,可接受的答案确实依赖于第一个内部数组长度。如果它更短,那么其他所有更大的指数都消失了

var数组=[[70,61,74,79,76,63,51,51],[64,84,84,66],[79,69],[77,100,98],
结果=数组.reduce(函数(r,a,i){
a、 forEach(函数(b,j){
r[j]=r[j]| | Array.apply(null,{length:Array.length}).map(函数(){return 0;});
r[j][i]=b;
});
返回r;
}, []);
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
我希望您实际上是在寻找转置现有数组的。 多亏了

得到的答案和你的有点不同。希望这能帮助你找到实现目标的正确途径

var数组=[[70,61,74,79,76,63,51,51],
[64, 84, 84, 66], 
[79, 69], 
[77, 100, 98]];
var arrayWithMaxlen=array.map(函数(a){return a.length;}).indexOf(Math.max.apply(Math,array.map(函数(a){return a.length;}));
log(“arrayWithMaxlen:+arrayWithMaxlen”)//获取具有最大长度的数组的索引
var newArray=array[arrayWithMaxlen].map(函数(col,i){
返回数组.map(函数(行){
如果(行[i]!=未定义)返回行[i];
否则返回0;
})
});
log(newArray)

.as console wrapper{max height:100%!important;top:0;}
您描述的操作基本上是一个简单的矩阵转置。有很多方法可以做到这一点。这里有一个选择:

var数组=[
[70, 61, 74, 79, 76, 63, 51, 51],
[64, 84, 84, 66],
[79, 69],
[77, 100, 98]
];
函数转置(arr){
var max=arr.reduce(函数(max,i){返回max.length>i.length?max:i;},[]);
返回最大的.map(函数(col,i){
返回arr.map(函数(行){
返回行[i]| | 0;
});
});
}

log(转置(数组))问题,为什么
98
3
行而不是
2
行?虽然我同意实现,但预期输出中可能存在错误或某些奇怪的原因,但是
3:(4)[79,66,98,0]
使您的输出不正确,可能会引起不必要的评论。请注意,使用此解决方案,如果第一个数组不是最长的,则结果将不包含所有原始值。因此,这个解决方案非常依赖于数组的顺序,以便返回正确的结果。感谢@Nikolaj Dam Larsen。我没注意到。希望更新后的代码能解决这个问题。是的,很好。:-)可以做得更干净一点,但那只是细节。