我正在做一个噩梦试图找出为什么无论输入什么,这个函数总是返回true。有问题的文档是JSON文件。我把它放入变量测试中,结果似乎总是正确的,不管是什么' test_type'是:
var doc = {
"test_type": "test3"
};
var ignore = ['test1', 'test2', 'test3'];
test = (ignore.some(function(v) {
return doc.test_type.toLowerCase().indexOf(v) == -1;
}));
console.log('Test:', test);

但是,如果我使用下面的代码,它只会返回true,如果' test_type'价值在'忽略'阵列。所以这将返回false。
var doc = {
"test_type": "test4"
};
var ignore = ['test1', 'test2', 'test3'];
test = (ignore.some(function(v) {
return doc.test_type.toLowerCase().indexOf(v) >= 0;
}));
console.log('Test:', test);

我想要做的是检查test_type是否与数组中的值匹配,或者更准确地说是否可以将数组中的字符串作为test_type数组中的子字符串找到,如果是,则从输出中排除doc。
答案 0 :(得分:1)
test_type
属性不是数组而是简单字符串。然后,您应该不使用indexOf
,而只是迭代数组并检查它是否与test_type
值匹配
var doc = {
"test_type": "test3 test5"
};
var array1 = ['test1', 'test2', 'test3']; // true
var array2 = ['test1', 'test2', 'test4']; // false
var docTestTypes = doc.test_type.split(" ");
var test1 = array1.some(function(elem, index, array) {
return docTestTypes.indexOf(elem.toLowerCase()) !== -1;
});
var test2 = array2.some(function(elem, index, array) {
return docTestTypes.indexOf(elem.toLowerCase()) !== -1;
});
console.log("test 1 : " + test1);
console.log("test 2 : " + test2);

答案 1 :(得分:0)
如果我正确理解了这个问题,那么
的语义ignore.some(function(v)
{
return doc.test_type.toLowerCase().indexOf(v) == -1;
});
将检查ignore是否包含test_type
中未出现的元素,这将是您的调用。