Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Performance - Fatal编程技术网

Javascript 如何在一个巨大的多维数组中找到每列的最大长度

Javascript 如何在一个巨大的多维数组中找到每列的最大长度,javascript,arrays,performance,Javascript,Arrays,Performance,我们有这种类型的数组,max表示列中单词的长度 var data = [ ["1111", "44"], ["222", "55555" ], ["33", "666" ], ... ]; "1111".length > "222".length > "33".length, "55555".length > "666".length > "44".length var max -> [4,5]; 因为这个数组实在太大了,那么最有效的方法是

我们有这种类型的数组,max表示列中单词的长度

var data = [
   ["1111", "44"],
   ["222", "55555"  ],
   ["33", "666"  ],
...
];

"1111".length > "222".length > "33".length,
"55555".length > "666".length > "44".length
var max -> [4,5];

因为这个数组实在太大了,那么最有效的方法是什么呢?

看看,每当插入新值时,您都可以尝试按字长对数组进行排序。然后您只需要在数组中找到第一个/最后一个值。(取决于它的排序方式)我不认为我能理解你。对于保持排序数组,JGrice做了一个很好的评论,否则你将不得不吃一顿饭。你不能对数组进行排序,因为它们表示值的显示顺序。我需要这个,所以我可以计算列的宽度并创建一个表,因为我将使用虚拟滚动。是的,这是不正确的。我的最大值:[8,4,8,4,2,6,8,3,3]您的最大值:[8,2:6,6:8]我的答案使用相关数据输出
[4,5]
[8,2:6,6:8]
从何而来?@MatjažJurečič您可以通过在内部forEach中执行来跳过第一个推零循环:
if(vl.length>(_maxs[indx]| 0))…
,如果我使用了不同的数据。问题不仅在于这些数据,也在于不同的数据。@MatjažJurečič:好的,很高兴你能找到答案。
var data = [
   ['ABC', 'ABCD', 'ABCDEF', 'abcd', 'a', 'Abcdef', 'Abcderfg', 'A', 'ABC'],
   ['ABCD', 'ABC', 'ABCDEF', 'abc', 'AB', 'Abcdef', 'abcd', 'ABC', 'ABC'],
   ['Abcderfg', 'ABC', 'ABCDEFGH', 'abc', 'A', 'ABCDEF', 'abcd', 'AB', 'ABC']
];


var _maxs = [];  
var lenghtOfRow = data[0].length, _maxs = [];
for (var i=0; i<lenghtOfRow; i++) 
    _maxs.push(0);


data.forEach(function (record) {
   record.forEach(function (vl, indx) {
     if (vl.length > _maxs[indx])
         _maxs[indx] = vl.length;
   })
});

console.log(_maxs);
_maxs = [];

data.forEach(function (record) {
   record.forEach(function (vl, indx) {
      if (vl.length > (_maxs[indx]|| 0))
          _maxs[indx] = vl.length;
    })
});