Roc*_*cky 4 javascript arrays loops functional-programming node.js
作为函数式编程的练习,我决定浏览一下我的一个项目,并将包含 for 循环的函数替换为 的Array.prototype
高阶函数,例如map
和reduce
。
我的项目中的一个函数对二维数组中的列进行平均。它需要一个参数,samples
它是一个大小为 2d 的数组[n][LOOKBACK]
:
[
[0.6, 4.0, -0.5],
[1.0, -0.5, -0.8],
...
]
Run Code Online (Sandbox Code Playgroud)
[
[0.6, 4.0, -0.5],
[1.0, -0.5, -0.8],
...
]
Run Code Online (Sandbox Code Playgroud)
输出应该是一个大小的数组LOOKBACK
,其元素是每列的平均值:
[0.8, 1.75, -0.65]
Run Code Online (Sandbox Code Playgroud)
我花了一些时间试图找出解决方案,但我似乎无法想出一个。
使用 Javascript 的内置数组函数可以实现这一点吗?
从基里尔那里得到了一个优雅的解决方案。如果其他人有一个好的解决方案,我很乐意看到更多。
reduce
尝试使用和函数来执行此示例forEach
:
let a = [
[0.6, 4.0, -0.5],
[3.0, -0.5, -0.1],
[1.0, -0.2, -0.8],
[7.0, -0.5, -0.8]
];
let b = a.reduce((acc, cur) => {
cur.forEach((e, i) => acc[i] = acc[i] ? acc[i] + e : e);
return acc;
}, []).map(e => e / a.length);
console.log(b);
Run Code Online (Sandbox Code Playgroud)
这是使用矩阵转置的更巧妙的方法:
let a = [
[0.6, 4.0, -0.5],
[3.0, -0.5, -0.1],
[1.0, -0.2, -0.8],
[7.0, -0.5, -0.8]
];
let b = a[0].map((col, i) => a.map(row => row[i]).reduce((acc, c) => acc + c, 0) / a.length);
console.log(b);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1492 次 |
最近记录: |