반응형
자바 스크립트에서 객체가 해시인지 배열인지 어떻게 식별 할 수 있습니까?
내 JSON 호출의 출력은 Array 또는 Hash 일 수 있습니다. 이 둘을 어떻게 구별합니까?
최신 브라우저는이 Array.isArray(obj)
방법을 지원합니다 .
= 2008 년의 원래 답변 =
출력의 constuctor 속성을 사용할 수 있습니다.
if(output.constructor == Array){
}
else if(output.constructor == Object){
}
객체 :
function isObject ( obj ) {
return obj && (typeof obj === "object");
}
배열 :
function isArray ( obj ) {
return isObject(obj) && (obj instanceof Array);
}
배열은 객체이기 때문에 변수가 배열인지 먼저 테스트 한 다음 객체인지 테스트해야합니다.
if (isArray(myObject)) {
// do stuff for arrays
}
else if (isObject(myObject)) {
// do stuff for objects
}
"해시"대신 "개체"를 의미 했습니까?
>>> var a = [];
>>> var o = {};
>>> a instanceof Array
true
>>> o instanceof Array
false
사전인지 판단하는 기능을 만들었습니다.
exports.is_dictionary = function (obj) {
if(!obj) return false;
if(Array.isArray(obj)) return false;
if(obj.constructor != Object) return false;
return true;
};
// return true
test.equal(nsa_utils.is_dictionary({}), true);
test.equal(nsa_utils.is_dictionary({abc:123, def:456}), true);
// returns false
test.equal(nsa_utils.is_dictionary([]), false);
test.equal(nsa_utils.is_dictionary([123, 456]), false);
test.equal(nsa_utils.is_dictionary(null), false);
test.equal(nsa_utils.is_dictionary(NaN), false);
test.equal(nsa_utils.is_dictionary('hello'), false);
test.equal(nsa_utils.is_dictionary(0), false);
test.equal(nsa_utils.is_dictionary(123), false);
개체의 "생성자"속성을 확인합니다. 그것은 배열입니다-그것은 배열 객체입니다.
var a = { 'b': {길이 : 0}, 'c': [1,2] } if (acconstructor == 배열) for (var i = 0; i < a.c.length; i++) alert(a.c[i]); else for (var s in a.b); alert(a.b[s]);
For parsing json could come in handy :)
isArrayHashs = (attr) ->
!!attr && attr.constructor == Array && isHash(attr[0])
isHash = (attr) ->
!!attr && !$.isNumeric(attr) && attr.constructor == Object
attr[0].constructor must be:
- String
- Numeric
- Array
- Object
- Undefined
반응형
'IT TIP' 카테고리의 다른 글
React Native에서 텍스트를 세로 (90도 회전)로 만들려면 어떻게해야합니까? (0) | 2020.10.31 |
---|---|
프로그래밍 방식으로 색상 밝게 (0) | 2020.10.31 |
T-SQL의 Levenshtein 거리 (0) | 2020.10.31 |
투영과 선택이란 무엇입니까? (0) | 2020.10.31 |
REST 리소스 URL의 쿼리 문자열 (0) | 2020.10.31 |