Вывод моего вызова JSON может быть либо массивом, либо хешем. Как отличить эти два?
В javascript мы можем определить, является ли объект Hash или Array?
Ответ 1
Современные браузеры поддерживают метод Array.isArray(obj)
.
См. MDN для документации и polyfill.
= оригинальный ответ от 2008 =
вы можете использовать свойство constuctor для вашего вывода:
if(output.constructor == Array){
}
else if(output.constructor == Object){
}
Ответ 2
Объект:
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
}
Ответ 3
Вы имели в виду "Объект" вместо "Хеш"?
>>> var a = [];
>>> var o = {};
>>> a instanceof Array
true
>>> o instanceof Array
false
Ответ 4
Я сделал функцию для определения, является ли это словарем.
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);
Ответ 5
Проверьте свойство "constructor" на объекте. Это Array - это объект массива.
var a = { 'b':{length:0}, 'c':[1,2] } if (a.c.constructor == Array) for (var i = 0; i < a.c.length; i++) alert(a.c[i]); else for (var s in a.b); alert(a.b[s]);
Ответ 6
Для парсинга json может пригодиться:)
isArrayHashs = (attr) ->
!!attr && attr.constructor == Array && isHash(attr[0])
isHash = (attr) ->
!!attr && !$.isNumeric(attr) && attr.constructor == Object
attr [0].constructor должен быть:
- Строка
- Числовые
- Массив
- Объект
- Undefined