문자열 목록 또는 단일 문자열을 허용하는 함수를 작성하려고합니다. 문자열 인 경우 하나의 항목으로 배열로 변환하려고하므로 오류에 대한 두려움없이 반복 할 수 있습니다.
그렇다면 변수가 배열인지 어떻게 확인합니까?
아래의 다양한 솔루션을 모아서 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]';
}