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

标签 javascript arrays list scala functional-programming

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

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/

相关文章:

java - 将 json 数据写入和读取到内部存储 android

javascript - 尝试使用 Javascript 填充隐藏输入

javascript - Backbone.js:在集合中使用模型事件时不会触发

javascript - 使用嵌套的 .each() 函数存储数据会导致复制值

string - SML - 在列表中查找元素并替换它

python - 如何从字典中的列表中的字典中获取键和值

c# - 如何从子词典中获取子元素列表?

javascript - Angular JS 注入(inject)自定义服务

java - 尝试将监听器添加到 JTextFields 数组时出现错误

混合了文字和数组的 Javascript 数组