这个 Javascript 在我的 map 函数之外可以正常工作:
var cribs = ["list","tree"];
if ( cribs.some(function(i){return (new RegExp(i,'gi')).test("a long list of words");}) ) {
console.log('match');
}
(它只是用数组中的值搜索一个字符串)。
虽然在我的地图功能中使用它不起作用:
var o = {};
o.map = function () {
if ( cribs.some(function(i){return (new RegExp(i,'gi')).test(this.name);}) ) {
emit(this, 1) ;
}
}
o.out = { replace: 'results' }
o.verbose = true;
textEntriesModel.mapReduce(o, function (err, model, stats) {
model.find(function(err, data){
console.log(data);
});
})
它不发出任何东西,所以我有一个空的结果集。没有错误。
如果我不使用array.some,而是使用普通的正则表达式,那么它可以正常工作:
o.map = function () {
if(this.name.match(new RegExp(/list/gi))) {
emit(this, 1) ;
}
}
所以我的问题是,为什么上面的 array.some 函数在我的 map 函数中不起作用?
我有一长串需要匹配的单词,所以我真的不想单独为它们写一个正则表达式,上面应该可以工作。
这是我试图在我的地图函数中使用的函数的 jsfiddle:http: //jsfiddle.net/tnq7b/