首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ramda简化阵列的计算

用Ramda简化阵列的计算
EN

Stack Overflow用户
提问于 2020-10-15 19:57:24
回答 1查看 33关注 0票数 2

我想像这样计算这三个数组。

代码语言:javascript
复制
const Data =  {
   x : [2,4,6],
   y : [10,10,10],
   z : [5,5,5]
}

const XtimesYplusZ = zipWith (add, (zipWith (multiply, Data.x, Data.y)), Data.z)
console.log(XtimesYplusZ);//[25,45,65] 

这段代码运行良好,但在可读性方面不是很好。因此,现在我创建了可以在以后应用的计算模式:

代码语言:javascript
复制
const calc1 =  ({x, y, z}) => x * y + z
console.log(calc1(Data)); //ERROR

这不管用。我有很多不同的模式,比如({x, y, z}) => x / y - z({x, y, z}) => (x + y) * z等等。像这样的数组的标准计算方法是什么?

REPL

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 20:07:16

在此示例中:

代码语言:javascript
复制
const calc1 =  ({x, y, z}) => x * y + z
console.log(calc1(Data)); //ERROR

您正在尝试添加和乘以数组,而不是数组的项。

使用R.zipWith就不会那么有效了,因为它需要实际的数组,并且一次只能压缩2个数组。

一个更简单的解决方案是使用R.props获取子数组,转置它们([[2, 10, 5], [4, 10, 5]]...),然后使用calc函数映射和组合值(我已经用数组解构替换了对象解构):

代码语言:javascript
复制
const { pipe, props, transpose, map } = R

const calc = ([x, y, z]) => x * y + z

const fn = pipe(props(['x', 'y', 'z']), transpose, map(calc))

const Data =  {
   x : [2,4,6],
   y : [10,10,10],
   z : [5,5,5]
}

const XtimesYplusZ = fn(Data)

console.log(XtimesYplusZ) // [25,45,65]
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

此示例显示了Scott的建议,即提取R.transpose和R.map的组合以创建zipAllWith函数:

代码语言:javascript
复制
const { curry, map, apply, transpose, pipe, props } = R

const zipAllWith = curry((fn, xss) => map(apply(fn), transpose(xss)));

const fn = pipe(props(['x', 'y', 'z']), zipAllWith((x, y, z) => x * y + z))

const Data =  {
   x : [2,4,6],
   y : [10,10,10],
   z : [5,5,5]
}

const XtimesYplusZ = fn(Data)

console.log(XtimesYplusZ) // [25,45,65]
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64371091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档