2015-01-12 1 views
2

문자열 또는 숫자 일 수있는 요소가 배열 안에 있는지 여부를 찾고 싶습니다. 배열은 test이고 요소는 value입니다.자바 스크립트에서 배열의 각 요소에 대한 toString()

function compare(value, test) { 
    // We need to stringify all the values to compare them with a string 
    return test.map(function(value){ 
    return value.toString(); 
    }).indexOf(value) > -1; 
    } 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"])); 

It does work : 지금까지 너무 좋아,이 코드가 있습니다. 그러나 내 요구에 맞지 않는 indexOf()uses strict equality이라는 사실 때문에 악마처럼 보입니다. 또한 작동하는 것이 다음을 수행 할 수 해키 방법 : 테스트 ["a", "b|c", "d"]을 경우 우리가 a, b 비교 될 거라고 이후는 간단하지만

return test.join("|").split("|").indexOf(value) > -1; 

은, 우리가 문제가, 그것을 볼 수 c & d 대신 a, b|c, d입니다. 안전 문자을 찾는 것도 옵션이 아니므로이 해결책은 유효하지 않습니다. indexOf()을 더 쉽게 수행 할 수있는 방법이 있나요? 보통 평등?

편집 : 내 첫 번째 시도는 항등에서 예기치 않게 거짓을 반환하는이를하고 있었는데 나는 그것을 복잡한 방법했던 그 이유는 :

["1", "2", "3"].indexOf(2); 
+0

귀하의'compare' 기능이 나에게 잘 보이고, 전혀 복잡, 당신이 그것을 변경해야하는 이유가 표시되지 않습니다 ? – adeneo

+0

'arr.map (String) .indexOf ("3");'원래 (: –

답변

1

당신은 다음과 같은 일을 할 수 있습니까?

function compare(value, test) { 
    return test.indexOf(Number(value)) > -1 || 
     test.indexOf(String(value)) > -1; 
} 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"])); 

또 다른 방법은 Array.prototype.some을 사용하는 것입니다 :

function compare(value, test) { 
    var num = Number(value), 
     str = String(value); 

    return test.some(function(val) { 
    return val === num || val === str; 
    }); 
} 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"]));