[javascript] 객체가 배열인지 확인하는 방법?

문자열 목록 또는 단일 문자열을 허용하는 함수를 작성하려고합니다. 문자열 인 경우 하나의 항목으로 배열로 변환하려고하므로 오류에 대한 두려움없이 반복 할 수 있습니다.

그렇다면 변수가 배열인지 어떻게 확인합니까?


아래의 다양한 솔루션을 모아서 jsperf 테스트를 만들었습니다 . 그들은 그래서 그냥 사용, 모든 빠르다 Array.isArray– 그것의 잘 지원 해주기 및 프레임에 걸쳐 작품 .



답변

최신 브라우저에서 할 수있는 일

Array.isArray(obj)

( 지원 크롬 5, 파이어 폭스 4.0, IE 9, 오페라 10.5 사파리 5)

이전 버전과의 호환성을 위해 다음을 추가 할 수 있습니다.

# only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

jQuery를 사용하면 jQuery.isArray(obj)또는 을 사용할 수 있습니다 $.isArray(obj). 밑줄을 사용하면_.isArray(obj)

다른 프레임에서 생성 된 배열을 감지 할 필요가없는 경우에도 instanceof

obj instanceof Array


답변

Object 클래스를 찾기 위해 ECMAScript 표준에 제공된 toString방법은 의 방법 을 사용하는 것입니다 Object.prototype.

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

또는 typeof문자열인지 테스트하는 데 사용할 수 있습니다 .

if( typeof someVar === 'string' ) {
    someVar = [ someVar ];
}

또는 성능이 걱정되지 않으면 concat빈 배열을 새로 만들 수 있습니다 .

someVar = [].concat( someVar );

직접 쿼리 할 수있는 생성자가 있습니다.

if (somevar.constructor.name == "Array") {
    // do something
}

아래의 의견에 게시 된 @TJ Crowder의 블로그 에서 철저한 치료 를 확인하십시오 .

어떤 벤치 마크 가 더 나은지 알아 보려면 이 벤치 마크 를 확인하십시오 : http://jsben.ch/#/QgYAV

에서 @Bharath의 질문과 대답 (FAQ) ES6를 사용하여 배열로 변환 문자열 :

const convertStringToArray = (object) => {
   return (typeof object === 'string') ? Array(object) : object
}

가정 :

let m = 'bla'
let n = ['bla','Meow']
let y = convertStringToArray(m)
let z = convertStringToArray(n)
console.log('check y: '+JSON.stringify(y)) . // check y: ['bla']
console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']


답변

먼저 구현이 지원하는지 확인합니다 isArray.

if (Array.isArray)
    return Array.isArray(v);

당신은 또한 instanceof연산자를 사용해보십시오

v instanceof Array


답변

jQuery는 다음과 같은 $.isArray()메소드 도 제공합니다 .

var a = ["A", "AA", "AAA"];

if($.isArray(a)) {
  alert("a is an array!");
} else {
  alert("a is not an array!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


답변

이것은 모든 방법 중에서 가장 빠릅니다 (모든 브라우저가 지원됨).

function isArray(obj){
    return !!obj && obj.constructor === Array;
}


답변

배열이 아래에 있다고 상상해보십시오 .

var arr = [1,2,3,4,5];

자바 스크립트 (새로운 브라우저 및 이전 브라우저) :

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

또는

function isArray(arr) {
  return arr instanceof Array;
}

또는

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]';
}

다음과 같이 호출하십시오.

isArray(arr);

자바 스크립트 (IE9 +, Ch5 +, FF4 +, Saf5 +, Opera10.5 +)

Array.isArray(arr);

jQuery :

$.isArray(arr);

모난:

angular.isArray(arr);

밑줄과 Lodash :

_.isArray(arr);


답변

Array.isArray는 빠르게 작동하지만 모든 버전의 브라우저에서 지원되는 것은 아닙니다. 따라서 다른 사람들을 제외하고 보편적 인 방법을 사용할 수 있습니다.

    Utils = {};
    Utils.isArray = ('isArray' in Array) ?
        Array.isArray :
        function (value) {
            return Object.prototype.toString.call(value) === '[object Array]';
        }