Javascript .filter()-如何正确使用val、arr和idx参数的示例?
我正在尝试确定.filter()如何工作 我想找到那些与提供的正则表达式匹配的元素,并构建一个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
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找到)有条件地返回所需的元素。聪明的东西。