2016-01-26 49 views
0

我试图在JavaScript中学习一些函数式编程原则,但有一些问题。我理解迭代方法(只是for循环),但我想知道是否有功能性编程风格的解决方案。使用.filter返回数组中的特定元素?

假设我们有一个数组A其中A每个元素是另一个数组,让我们把这些元素a

A: [ Array[28], Array[28], ... ], where a_1..a_n is an array of size 28 

现在说我只希望5th elementa(所以a[4])。

我该怎么做,使用高阶函数之一,如.map, .filter等?

我已经尝试的方法为例如:

function myMethodThatReturns5thElem(n) { 
return n[4]; 
} 

var arrayThatHas5thElements = A.filter(myMethodThatReturns5thElem); 

但随后arrayThatHas5thElements是完全相同的阵列A ..

希望这是很有意义的。

谢谢。

+0

你想使用'.filter'函数中的第二个参数,它是'index' - 'A.filter(function(innerArray,index){return index === 4});' – tymeJV

+0

但不是'那些各个数组的索引?我真的只想要在这些单独的阵列内的第四个元素 – fzxt

+1

哦!听起来像是你想'.map' ...'A.map(function(inner){return inner [4]});' – tymeJV

回答

1

你想.map返回数组的特定部分:

var subset = A.map(function(inner) { 
    return inner[4]; 
}); 

如果你想在单个阵列 - 而不是1元一串内部阵列 - 刚好压平的结果:

var subsetFlattened = A.map(function(inner) { 
    return inner[4]; 
}).reduce(function(p, c, i, a) { 
    return p.concat(c); 
}, []); 
1
arr.filter(callback) 

回调功能:

返回真正保持元素,否则。

因此,这意味着,当该项目是第四要素的功能arrayThatHas4thElement应该返回真

回调函数接收3个参数:

  • 元素
  • 元素的indexvalue

你可以使用第二个参数来评估你是什么重新寻找。