查找数组数组中最长数组的索引

新手上路,请多包涵

如果您有一个包含无限数量数组的数组

前任:

 var masterArray = [ [1,2,3,4,5],
                    [1,2],
                    [1,1,1,1,2,2,2,2,4,4],
                    [1,2,3,4,5] ];

在 masterArray 中找到最长数组索引的有效方法是什么? (在此示例中,索引为 2)。

原文由 jmancherje 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

一线是:

 masterArray
  .map(a=>a.length)
  .indexOf(Math.max(...masterArray.map(a=>a.length)));

但最好缓存 masterArray.map(a=>a.length) 结果。

 const lengths = masterArray.map(a=>a.length);
lengths.indexOf(Math.max(...lengths));

请注意,此代码仍然至少迭代数组\* 3 次( mapmaxindexOf 分别)。

* 扩展运算符是为了便于阅读,可以省略


为了提高效率,您应该手动迭代数组。

 let max = -Infinity;
let index = -1;
masterArray.forEach(function(a, i){
  if (a.length > max) {
    max = a.length;
    index = i;
  }
});


Reduce 方法:

 masterArray.reduce((maxI,el,i,arr) =>
    (el.length>arr[maxI].length) ? i : maxI, 0);

原文由 vp_arth 发布,翻译遵循 CC BY-SA 4.0 许可协议

.reduce 是最好的方法:

 masterArray.reduce(function (pending, cur, index, ar) { ar[ pending ].length > cur.length ? pending : index }, 0);

或者使用 ES6:

 masterArray.reduce((p, c, i, a) => a[p].length > c.length ? p : i, 0);

原文由 Downgoat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题