개체가 배열인지 확인하려면 어떻게 해야 합니까?
문자열 목록 또는 단일 문자열을 사용할 수 있는 함수를 작성하려고 합니다.문자열이라면 하나의 항목만 있는 배열로 변환하여 오류 없이 루프 오버할 수 있도록 합니다.
변수가 배열인지 확인하려면 어떻게 해야 합니까?
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 |