[英]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.