gpt4 book ai didi

javascript - 使用原始的非过滤元素过滤功能语言?

转载 作者:搜寻专家 更新时间:2023-11-01 04:58:28 26 4
gpt4 key购买 nike

我想返回一个数组,该数组映射了一些已过滤的元素 - 但我想将未过滤的元素保留在原处。即有没有简单的方法来做到这一点?:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com