2016-11-14 8 views
0

なぜ入力が何であっても、この関数が常にtrueを返す理由を試しています。問題のドキュメントはJSONファイルです。私は、変数のテストにそれを入れている、と結果は関係なく、常に「test_type」であるものの、真であることが表示されます。入力に関係なくtrueを返す関数

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);

しかし、私が代わりに以下のコードを使用している場合、それはなります'test_type'値が 'ignore'配列内にある場合のみtrueを返します。これは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配列内の部分として見ることができるかどうかどうかをチェックされてやりたいとその場合は、出力からドキュメントを除外します。

+0

と一致した場合、私はあなたが* *たいと、なぜそれらのスニペットのどちらであるかについて積極的に混乱していますあなたのアレイを反復して確認する必要がありますあなたのために働いています... – deceze

+0

'return doc.test_type.toLowerCase()。indexOf(v.toLowerCase)> = 0'の配列要素を小文字にする必要があります。 – Mihir

+2

2番目の関数は正しく機能します。 'some()'は条件を満たす要素があれば 'true'を返します。それであなたの最初の関数が常に 'true'を返すのです。 –

答えて

0

私が正しく質問を理解している場合、

ignore.some(function(v) 
      { 
       return doc.test_type.toLowerCase().indexOf(v) == -1; 
      }); 

のセマンティクスは無視するが、お電話用ケースだろうtest_typeで発生していない要素が、含まれているかどうかをチェックすることです。

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);

+0

if彼はindexOfの使用にはまったく役に立たず、 return array1.indexOf(elem.toLowerCase())!= -1; – FvB

+0

@FvBコードが間違っています。反復処理中の要素が反復処理中の配列内にあるかどうかをチェックしています...これは常に真です。しかし、 'indexOf'は実際には必要ありません。 – Weedoze

+0

申し訳ありませんが、私が明確にしていないのは、JSONに" test3 test "が含まれている可能性があるということです。しかし、配列の値のいずれかが "test_type"で見つかるかどうかを識別したいと思っています。だから "test3 test"はまだtrueを返します。 – hoskarl

関連する問題