Я преобразую XML-строку в JSON с помощью PHP, а затем отправляю ее в javascript файл, в котором я пытаюсь повторить его. Когда объект содержит более одного объекта, json содержит массив объектов, подобных первому примеру, и я могу выполнить итерацию с помощью функции .length
, но когда объект содержит только 1 объект, массив не создается, а {{X1 }} Сбой функции. Как сделать так, чтобы итерация работала в обоих случаях, не зная имени объекта?
Образец 1:
{"class":[
{
"name":"history",
"grade":"10"
},
{
"name":"chemistry",
"grade":"8"
}
]
}
Образец 2:
{"class":
{
"name":"history",
"grade":"10"
}
}
4 ответа
Вы можете проверить length
, и если это undefined
, это означает, что это просто объект, тогда вы сделаете его массивом только с одним элементом:
if collection.length == undefined:
collection = [collection]
# the rest of the code doesn't need to be changed
Вы можете проверить, является ли объект первым массивом: Array.isArray(obj)
. Если это не так, то вы знаете, что вам не нужно повторять это.
var obj = {"class":[
{
"name":"history",
"grade":"10"
},
{
"name":"chemistry",
"grade":"8"
}
]
}
if (!Array.isArray(obj)) return obj;
// else iterate it.
Вы должны знать тип данных переменной, прежде чем знать, как правильно использовать .length
.
var dataTypeLength;
var data = {
"class":
{
"name":"history",
"grade":"10"
}
}
if (Array.isArray(data.class)) {
dataTypeLength = data.class.length;
} else {
dataTypeLength = Object.keys(data.class).length;
}
console.log(dataTypeLength);
Вы можете использовать for
для этого, и вам не нужно length
var test = {"class":[
{
"name":"history",
"grade":"10"
},
{
"name":"chemistry",
"grade":"8"
}
]
}
for (var i in test){
console.log(test[i]);
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.