2016-11-14 10 views
0

나는 왜이 함수가 입력에 상관없이 항상 true를 반환하는지 알아 내려고 악몽을 꾼다. 문제의 문서는 JSON 파일입니다. 나는 아래 대신 코드를 사용하는 경우는 것, 그러나입력에 관계없이 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);

내가, 테스트 유형 배열에 값을 일치, 또는 좀 더 정확하게 배열에서 문자열이 테스트 유형 배열 내의 부분으로 발견 될 수 있는지 여부를 확인하면된다 싶어 그렇다면 출력에서 ​​문서를 제외하십시오.

+0

당신이 * * 원하는 작업에 대한 긍정적 혼란 스러워요 그 조각 중 어느 것도 그 이유입니다 ... – deceze

+0

아마도 배열 요소를 소문자로 처리해야 할 수도 있습니다.'return doc.test_type.toLowerCase(). indexOf (v.toLowerCase)> = 0' – Mihir

+2

두 번째 함수가 올바르게 작동합니다. 어떤 요소가 조건을 만족하면'some()'는'true'를 반환합니다. 그래서 첫 번째 함수는 항상 'true'를 반환합니다. –

답변

0

내가 제대로 질문을 이해하면,

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

의 의미 확인 여부를 무시하는 것은 통화의 경우 것 test_type 발생하지 않는 요소가 포함되어 있습니다.

1

test_type 속성은 배열이 아니라 단순한 문자열입니다. 그것은 test_type 값과 일치하는 경우는 다음 indexOf를 사용하지만 단순히 배열을 반복하고 확인 안

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 테스트"는 여전히 true를 반환합니다. – hoskarl

관련 문제