개체가 배열인지 확인하려면 어떻게 해야 합니까?
문자열 목록 또는 단일 문자열을 사용할 수 있는 함수를 작성하려고 합니다.문자열이라면 하나의 항목만 있는 배열로 변환하여 오류 없이 루프 오버할 수 있도록 합니다.
변수가 배열인지 확인하려면 어떻게 해야 합니까?
ECMAScript 표준에서 주어진 오브젝트 클래스를 찾는 방법은toString
from method method method method 。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
}
T.J. Crowder의 블로그에서 그의 코멘트에 게재된 철저한 치료법을 확인해 보세요.
이 벤치마크에서 어떤 방법이 더 나은지 알아보세요.http://jsben.ch/ # / QgYAV
다음 질문에 대해 @Bharath에서 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']
최신 브라우저에서는 다음을 수행할 수 있습니다.
Array.isArray(obj)
(Chrome 5, Firefox 4.0, Internet Explorer 9, Opera 10.5 및 Safari 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)
Underscore.js 를 사용하는 경우는,_.isArray(obj)
.
없는 는, 「에 있다」를 사용해 .instanceof
:
obj instanceof Array
i i i음음음음음음음음음음음음음음음음음음 i i i i i i i i를 지원하는지 하겠습니다.isArray
:
if (Array.isArray)
return Array.isArray(v);
, 이, 이, 이, 이, 이, 세, 세, 세, 세, 세, you, you, you, you을 사용해instanceof
v instanceof Array
jQuery는 다음 메서드도 제공합니다.
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];
JavaScript(신규 및 이전 브라우저):
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);
JavaScript (Internet Explorer 9+, Chrome 5+, Firefox 4+, Safari 5+ 및 Opera 10.5+)
Array.isArray(arr);
j쿼리:
$.isArray(arr);
각도:
angular.isArray(arr);
밑줄.js 및 Lodash:
_.isArray(arr);
Array.isArray는 빠르게 동작하지만 일부 브라우저 버전에서는 지원되지 않습니다.
따라서 다른 사용자를 위해 예외를 두고 범용적인 방법을 사용할 수 있습니다.
Utils = {};
Utils.isArray = ('isArray' in Array) ?
Array.isArray :
function (value) {
return Object.prototype.toString.call(value) === '[object Array]';
}
이를 확인하는 간단한 기능:
function isArray(object)
{
return object.constructor === Array;
}
이 질문에 대한 해결 방법은 하나뿐입니다.
x instanceof Array
여기서 x는 변수입니다.x가 배열이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
Array.isArray()를 사용할 수 있습니다.폴리필은 다음과 같습니다.
if (Array.isArray == null) {
Array.isArray = (arr) => Object.prototype.toString.call(arr) === "[object Array]"
}
Array.isArray 또는 Object.protype.toString.call을 사용하여 일반 개체를 어레이와 구별합니다.
다음과 같이 합니다.
Object.prototype.toString.call(arr) === '[object Array]'
「」Array.isArray(arr)
당신이 취급하고 있는 물건의 종류를 테스트하는 기능을 만들겠습니다.
function whatAmI(me){ return Object.prototype.toString.call(me).split(/\W/)[2]; }
// tests
console.log(
whatAmI(["aiming","@"]),
whatAmI({living:4,breathing:4}),
whatAmI(function(ing){ return ing+" to the global window" }),
whatAmI("going to do with you?")
);
// output: Array Object Function String
간단한 if 스테이트먼트를 쓸 수 있습니다.
if(whatAmI(myVar) === "Array"){
// do array stuff
} else { // could also check `if(whatAmI(myVar) === "String")` here to be sure
// do string stuff
}
변수의 유형이 다음과 같은 배열인지 여부를 확인할 수 있습니다.
var myArray=[];
if(myArray instanceof Array)
{
....
}
나는 이것을 매우 간단한 방법으로 한다.저는 좋아요.
Array.prototype.isArray = true;
a=[]; b={};
a.isArray // true
b.isArray // (undefined -> false)
이것은 코멘트를 고려하여 이 답변을 개선하려는 저의 시도입니다.
var isArray = myArray && myArray.constructor === Array;
if/else를 제거하고 어레이가 null이거나 정의되지 않았을 가능성을 설명합니다.
오류 체크와 함께 두 가지 대체 방법으로 jsperf fidle을 업데이트했습니다.
'개체' 및 '배열' 프로토타입에서 상수 값을 정의하는 방법이 다른 방법보다 더 빠른 것으로 나타났습니다.그것은 다소 놀라운 결과이다.
/* Initialisation */
Object.prototype.isArray = function() {
return false;
};
Array.prototype.isArray = function() {
return true;
};
Object.prototype._isArray = false;
Array.prototype._isArray = true;
var arr = ["1", "2"];
var noarr = "1";
/* Method 1 (function) */
if (arr.isArray()) document.write("arr is an array according to function<br/>");
if (!noarr.isArray()) document.write("noarr is not an array according to function<br/>");
/* Method 2 (value) - **** FASTEST ***** */
if (arr._isArray) document.write("arr is an array according to member value<br/>");
if (!noarr._isArray) document.write("noarr is not an array according to member value<br/>");
이러한 두 가지 방법은 변수가 정의되지 않은 값을 취하면 작동하지 않지만 값이 있는 것이 확실하면 작동합니다.퍼포먼스를 염두에 두고 값이 배열인지 단일인지 확인하는 것에 대해서는 두 번째 방법은 유효한 고속 방식이라고 생각됩니다.이는 Chrome의 Instanceof보다 약간 빠른 속도로 Internet Explorer, Opera, Safari(내 컴퓨터)의 두 번째 방법보다 두 배나 빠릅니다.
알아요, 사람들은 일종의 원시 JavaScript 접근 방식을 찾고 있어요.단, Underscore.js' isArray를 참조해 주십시오.
_.isArray(object)
개체가 배열이면 true를 반환합니다.
(function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true
하기 위해서는 비교하다를 이 가장 좋습니다.constructor
거
if(some_variable.constructor === Array){
// do something
}
쓸 수요.typeOf
를 문자열로 변환한 후 비교합니다.단, dataType과 비교하는 것이 항상 좋은 방법입니다.
지금까지 본 솔루션 중 최고의 솔루션은 크로스 브라우저로 대체한 것입니다.앵거스 크롤의 용액을 확인합니다.
TL;DR 버전은 아래와 같습니다만, 이 기사는 이 문제에 대한 훌륭한 토론이므로, 시간이 있을 때 읽어보시기 바랍니다.
Object.toType = function(obj) {
return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
}
// ... and usage:
Object.toType([1,2,3]); //"array" (all browsers)
// or to test...
var shouldBeAnArray = [1,2,3];
if(Object.toType(shouldBeAnArray) === 'array'){/* do stuff */};
할 수 " "를 합니다.typeof
문자열 가능성을 확인합니다.
function someFunc(arg) {
var arr = (typeof arg == "string") ? [arg] : arg;
}
저의 게으른 접근법은 다음과 같습니다.
if (Array.prototype.array_ === undefined) {
Array.prototype.array_ = true;
}
// ...
var test = [],
wat = {};
console.log(test.array_ === true); // true
console.log(wat.array_ === true); // false
프로토타입에 "혼란"을 일으키는 것은 신성모독이라는 것을 알지만, 권장되는 방법보다 훨씬 더 나은 성능을 발휘하는 것으로 보입니다.
주의: 이 접근법의 단점은 경계를 넘어서는 동작하지 않는다는 것입니다만, 제 사용 예에서는 문제가 되지 않습니다.
이 함수는 거의 모든 것을 배열로 변환합니다.
function arr(x) {
if(x === null || x === undefined) {
return [];
}
if(Array.isArray(x)) {
return x;
}
if(isString(x) || isNumber(x)) {
return [x];
}
if(x[Symbol.iterator] !== undefined || x.length !== undefined) {
return Array.from(x);
}
return [x];
}
function isString(x) {
return Object.prototype.toString.call(x) === "[object String]"
}
function isNumber(x) {
return Object.prototype.toString.call(x) === "[object Number]"
}
일부 새로운 브라우저 기능을 사용하기 때문에 최대한의 지원을 위해 이 기능을 폴리필할 수 있습니다.
예:
> arr(null);
[]
> arr(undefined)
[]
> arr(3.14)
[ 3.14 ]
> arr(1/0)
[ Infinity ]
> gen = function*() { yield 1; yield 2; yield 3; }
[Function: gen]
> arr(gen())
[ 1, 2, 3 ]
> arr([4,5,6])
[ 4, 5, 6 ]
> arr("foo")
[ 'foo' ]
N.B. 문자열은 문자 배열 대신 단일 요소를 가진 배열로 변환됩니다.삭제하다isString
반대로 하고 싶은지 체크해 주세요.
사용한 적이 있다Array.isArray
가장 견고하고 심플한 설계이기 때문입니다.
오브젝트에 concat 메서드가 없는 것을 알고 있는 경우는, 이하를 사용할 수 있습니다.
var arr = [];
if (typeof arr.concat === 'function') {
console.log("It's an array");
}
var a = [], b = {};
console.log(a.constructor.name == "Array");
console.log(b.constructor.name == "Object");
Stoyan Stephanov의 책 JavaScript Patterns에는 ECMAScript 5 메서드 Array.isArray()를 사용할 수 있는 좋은 예가 있습니다.
여기 있습니다.
if (typeof Array.isArray === "undefined") {
Array.isArray = function (arg) {
return Object.prototype.toString.call(arg) === "[object Array]";
};
}
덧붙여서 jQuery를 사용하는 경우 메서드 $.isArray()를 사용할 수 있습니다.
isArray 메서드를 사용할 수 있지만 다음 방법으로 확인하고 싶습니다.
Object.getPrototypeOf(yourvariable) === Array.prototype
function isArray(value) {
if (value) {
if (typeof value === 'object') {
return (Object.prototype.toString.call(value) == '[object Array]')
}
}
return false;
}
var ar = ["ff","tt"]
alert(isArray(ar))
입력값이 배열인지 여부를 테스트하는 간단한 기능은 다음과 같습니다.
function isArray(value)
{
return Object.prototype.toString.call(value) === '[object Array]';
}
이 기능은 브라우저 간 및 이전 브라우저에서 작동합니다.이건 TJ 크라우더스의 블로그 게시물에서 따온 겁니다
다음과 같이 시험해 보십시오.
var arr = []; (or) arr = new Array();
var obj = {}; (or) arr = new Object();
arr.constructor.prototype.hasOwnProperty('push') //true
obj.constructor.prototype.hasOwnProperty('push') // false
고객님의 경우concat
단일 객체 및 어레이(및 조합도 가능)를 수용할 수 있는 어레이 방식:
function myFunc(stringOrArray)
{
var arr = [].concat(stringOrArray);
console.log(arr);
arr.forEach(function(item, i)
{
console.log(i, "=", item);
})
}
myFunc("one string");
myFunc(["one string", "second", "third"]);
concat
는 어레이의 가장 오래된 방법 중 하나라고 생각됩니다(IE 5.5에서도 잘 알고 있습니다).
언급URL : https://stackoverflow.com/questions/4775722/how-can-i-check-if-an-object-is-an-array
'IT' 카테고리의 다른 글
추출하다Android에서 비활성 InputConnection 경고 텍스트 (0) | 2022.10.30 |
---|---|
MySql.Data.MySql Client 。MySqlException: "호스트 로컬 호스트가 SSL 연결을 지원하지 않습니다." (0) | 2022.10.30 |
PhpMyAdmin: "요청 처리 중 오류 발생:" (오류 없음) (0) | 2022.10.30 |
Jupyter Notebook과 Jupyter Lab의 차이점은 무엇입니까? (0) | 2022.10.30 |
PHP에 의해 계산된 C.R.A.P 인덱스를 읽거나 개선하는 방법 (0) | 2022.10.30 |