这个Javascript在我的地图功能之外工作正常:
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/
答案 0 :(得分:3)
您需要cribs
功能将map
添加到scope
选项中,以使var cribs = ["list","tree"];
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.scope = { cribs: cribs };
o.verbose = true;
textEntriesModel.mapReduce(o, function (err, model, stats) {
model.find(function(err, data){
console.log(data);
});
});
可用:
{{1}}