Javascript Cookbook

배열 콘텐츠 유효성 검사하기

문제

배열이 특정 조건을 만족시키는지 확인하고 싶다.

해결

Array 객체의 every 메서드를 사용하면 모든 원소가 주어진 조건을 통과하는지 확인할 수 있다. 예를 들어 다음 코드는 배열의 모든 원소가 알파벳과 숫자로만 이루어졌는지 확인한다.

var elemSet = new Array("**",123,"aaa","abc","-",46,"AAA");

//테스트 함수
function textValue(element, index, array){
    var textExp = /^[a-zA-Z]+$/;
    return textExp.test(element);
}

//테스트 실행
document.write(elemSet.every(textValue));    //false

Array 객체의 some 메서드를 사용하면 주어진 조건을 만족시키는 요소가 최소 1개 이상 있는지 확인할 수 있다. 다음 코드는 배열의 원소 중 알파벳과 숫자로만 이루어진 문자열이 하나라도 있는지 확인한다.

var elemSet = new Array("**",123,"aaa","abc","-",46,"AAA");

//테스트 함수
function textValue(element, index, array){
    var textExp = /^[a-zA-Z]+$/;
    return textExp.test(element);
}

//테스트 실행
document.write(elemSet.some(textValue));    //true

설명

every 메서드를 사용할 때는 함수의 반환값이 false가 되면 동작을 멈추고 메서드는 false를 반환한다.

반면 some 메서드는 반환값이 true일 때까지만 원소를 계속 확인한다. 그러나 콜백 함수가 모든 원소를 검사하고 어느 시점에서도 true를 반환하지 않는다면 some 메서드는 false를 반환한다.

모든 배열 원소가 조건을 만족하는지 알고 싶다면 every, 그렇지 않다면 some 을 사용하면 된다.

someevery 메서드 모두 IE8을 제외한 대부분의 최신 브라우저에서 지원한다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every