2014-06-28 37 views
1

我试图确定.filter()如何工作。.filter() - 如何正确使用val,arr和idx参数的例子?

我想找到那些符合所提供的正则表达式的元素,并建立一个newArray那些元素,但它马上跟着他们原来的数组中的这些元素。

下面的尝试有什么问题?

function searchNames(logins){ 
    var regex =/^\.|\.$/; 
    var newArray = logins.filter(function(el,idx,arr){ 
     if (regex.test(el)) { 
      console.log('desired return value is '+arr[idx+1]); 
      return arr[idx + 1]; // but I get the original 'el' instead 
     } 
    }); 
    console.log(newArray); 
} 

searchNames([ "foo", "[email protected]", "bar", "[email protected]", ".foo", "[email protected]" ]); 

有没有网上的例子像这样?我当然找不到一个。

+0

你想要做的不是真正的'.filter()'最好的应用程序。 JavaScript没有'.partition()'方法,但这将是一个很好的第一遍:组值对,以便您可以使用一组数组。然后,'.filter()'很容易。 – Pointy

+0

哦,你的代码的问题是'.filter()'期望回调函数只返回'true'或'false';它不会使用这些值来构建新的数组。这就是'.map()'所做的。 – Pointy

+0

我会使用.map(),但赋值要求使用.filter()...发现可以使用&&根据相邻元素的属性有条件地返回所需的元素idx和arr)。聪明的东西。 – dwilbank

回答

1

您不能从return这个元素在回调中的新数组中。 filter method的确预计布尔结果当前元素应该在结果数组中。在你的情况下,这将是

var newArray = logins.filter(function(el,idx,arr){ 
    return idx > 0 && regex.test(arr[idx-1]); 
}); 
相关问题