簡體   English   中英

有什么方法可以避免for循環? (ES6 / JavaScript)

[英]Any way to avoid a for loop? (ES6 / JavaScript)

使用ES6改進我的算法知識(我是ES6的新手),並想知道在我編寫的每個數組函數中最大的避免for循環是否有任何方法(如果在所有方面)?

function largestEach(arr) {
   for(const [i,v] of arr.entries())
      arr[i] = v.sort((a,b) => b - a).filter((e,i) => i === 0);
   return arr.reduce((a,b) => a.concat(b));
}
largestEach([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

控制台日志: [5, 27, 39, 1001]這是正確的。

這是概念性的,所以我沒有使用它的真實用例。 我不反對循環只是好奇我在ES6(或一般的JS)中更好的選擇。 純粹好奇!

你可以簡單地使用.map() 基本上你的for循環等同於:

arr = arr.map(elem => elem.sort((a, b) => b - a).filter(e,i) => i === 0)

然而,接下來有趣的是在這種情況下你不必指定sort函數。 另外我不會使用.filter(e,i) => i === 0)而是.pop()[0]

所以你可以改寫:

arr = arr.map(elem => elen.sort()[0])

接下來你可以使用Math.max ,這樣你就可以重寫整個函數:

function largestEach(arr) {
  return arr.map(e => Math.max(...e))
}
function largestEach(arr) {
   return arr.map(a => a.reduce((a, b) => Math.max(a, b)));
}
function largestEach(arr) {
   return arr.map((a)=> Math.max.apply(null, a))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM