Javascript .filter()-如何正确使用val、arr和idx参数的示例?

Javascript .filter()-如何正确使用val、arr和idx参数的示例?,javascript,Javascript,我正在尝试确定.filter()如何工作 我想找到那些与提供的正则表达式匹配的元素,并构建一个newArray,不是这些元素,而是原始数组中紧随其后的元素 下面的尝试有什么问题 function searchNames( logins ){ var regex =/^\.|\.$/; var newArray = logins.filter(function(el,idx,arr){ if (regex.test(el)) { consol

我正在尝试确定.filter()如何工作

我想找到那些与提供的正则表达式匹配的元素,并构建一个
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", "foo@bar.com", "bar", "bar@foo.com", ".foo", "food@bar.com" ]);

网上没有这样的例子吗?我确实找不到。

您不能从回调返回新数组中所需的元素。对于当前元素是否应位于结果数组中,不需要布尔结果。对你来说,那就是

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

对于
.filter()
,您试图做的并不是最好的应用程序。JavaScript没有
.partition()
方法,但这是一个很好的第一步:对值对进行分组,以便使用数组数组。然后,
.filter()
就很容易了。哦,代码的问题是
.filter()
希望回调函数只返回
true
false
;它不使用这些值来构建新数组。这就是
.map()
所做的。我会使用.map(),但赋值要求使用.filter()。。。发现您可以使用&&根据相邻元素的属性(可通过idx和arr找到)有条件地返回所需的元素。聪明的东西。