2014-06-28 36 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]); 
}); 
相關問題