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-вкладыш:
masterArray.map(function(a){return a.length;}).indexOf(Math.max.apply(Math, masterArray.map(function(a){return a.length;})));
Но лучше кэшировать map
результаты.
var lengths = masterArray.map(function(a){return a.length;});
lengths.indexOf(Math.max.apply(Math, lengths));
Обратите внимание, что даже этот код итерация массива в 3 раза (map
, max
, indexOf
отдельно).
Для более эффективного использования вы должны использовать ручной итерационный массив.
var max = -Infinity;
var index = -1;
masterArray.forEach(function(a, i){
if (a.length>max) {
max = a.length;
index = i;
}
});
Reduce
метод:
masterArray.reduce(function(maxI,el,i,arr) {return el.length>arr[maxI].length ? i : maxI;}, 0)
Efficient в каком смысле? –
Я должен был быть более ясным. Я просто имел в виду в сжатом виде, ничего об эффективности памяти – jmancherje