【发布时间】:2011-11-30 22:33:43
【问题描述】:
我想返回一个映射一些过滤元素的数组 - 但我想将非过滤元素保留在它们所在的位置。 即有没有简单的方法可以做到这一点?:
array
.filter(
function(element){
// some test
}
)
.map(
function(element){
// some mapping
}
)
我想出的最接近的解决方案是:
array
.map(
function(value, index){
if (<test>) {
return <mapping>(value);
}
}
)
但我觉得这在某种程度上破坏了函数式编程的精神。
我不是要求特定的语言实现,尽管 Scala 或 JavaScript 中的示例会很好。
编辑:这是我正在寻找的具体示例:
[1,2,3,4,11,12]
将所有元素映射到 element*10,对于数组中大于 10 的所有元素,应该产生
[1,2,3,4,110,120]
EDIT2:我为使用“变异”这个词道歉。我并不是说要改变原始数组 - 我更多地考虑改变数组的副本。
【问题讨论】:
-
第二个代码不会改变任何东西。除非您正在使用具有传递引用的未知 Javascript 版本进行编程。
-
已修复,尽管代码最终看起来更糟。
-
您能否提供您希望函数式语法看起来像的伪代码?
-
类似于第一个代码 sn-p 的内容 - 我想将测试函数与变异函数分开。
-
我显然遗漏了一些东西:您的第一个示例不正是您正在寻找的吗?
标签: javascript arrays list scala functional-programming