我想返回一个数组,该数组映射了一些已过滤的元素 - 但我想将未过滤的元素保留在原处。 即有没有简单的方法来做到这一点?:
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]
将所有元素映射到元素*10,对于数组中大于10的所有元素,应该产生
[1,2,3,4,110,120]
EDIT2:我为使用“变异”这个词道歉。我并不是说要改变原始数组 - 我更多的是在考虑改变数组的副本。
最佳答案
如果您使用的是可变集合,它就不会真正发挥作用。但是您可以在 Scala 中使用 transform
:
scala> val a = Array(1,2,3,4,11,12)
a: Array[Int] = Array(1, 2, 3, 4, 11, 12)
scala> a.transform {i => if(i > 10) i * 10 else i}
res10: scala.collection.mutable.WrappedArray[Int] = WrappedArray(1, 2, 3, 4, 110, 120)
编辑:
如果你想分离过滤器和 map ,使用一个 View
:
scala> a
res22: Array[Int] = Array(1, 2, 3, 4, 11, 12)
scala> a.view.filter(_ > 10).transform(_ * 10)
res23: scala.collection.mutable.IndexedSeqView[Int,Array[Int]] = SeqViewF(...)
scala> a
res24: Array[Int] = Array(1, 2, 3, 4, 110, 120)
关于javascript - 使用原始的非过滤元素过滤功能语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652552/