var masterArray = [ [1,2,3,4,5],
[1,2],
[1,1,1,1,2,2,2,2,4,4],
[1,2,3,4,5] ];
One-liner è:
masterArray.map(function(a){return a.length;}).indexOf(Math.max.apply(Math, masterArray.map(function(a){return a.length;})));
Ma meglio di memorizzare nella cache map
risultati.
var lengths = masterArray.map(function(a){return a.length;});
lengths.indexOf(Math.max.apply(Math, lengths));
nota, anche questo codice iterate matrice 3 volte (map
, max
, indexOf
separatamente).
Per un funzionamento più efficiente, è necessario eseguire l'iterazione dell'array manuale.
var max = -Infinity;
var index = -1;
masterArray.forEach(function(a, i){
if (a.length>max) {
max = a.length;
index = i;
}
});
Reduce
metodo:
masterArray.reduce(function(maxI,el,i,arr) {return el.length>arr[maxI].length ? i : maxI;}, 0)
efficiente in che modo? –
Avrei dovuto essere più chiaro su questo. Intendevo solo in modo conciso, nulla sull'efficienza della memoria – jmancherje