我从服务器中获取了一些Json,我在dom中动态构建一个表。 当有多个对象时,数据将作为对象数组返回 像这样:
{
"ProductList": {
"Products": [{
"ProductID": "1",
"Name": "ProdName"},
{
"ProductID": "2",
"Name": "ProdName2"}]
}
}
然而,当只有一个对象时,它只是作为一个对象而不是像这样的数组返回:
{
"ProductList": {
"Products": {
"ProductID": "3",
"Name": "ProdName3"
}
}
}
所以我一直在做的是检查它是否是这样的数组:
if ($.isArray(productDetails.ProductList.Products) === true) {
for (i = 0; i < productDetails.ProductList.Products.length; i++) {
//Create the dom elements by accessing the object properties with [i]
//ie. productDetails.ProductList.Products[i].ProductsID
}
}
else {
//Create the dom elements by accessing the object properties w/o [i]
//ie. productDetails.ProductList.Products.ProductsID
}
它有效,但我有很多代码完全相同,除了访问对象属性的方式,每当我改变一个我需要记住改变另一个或我会有问题。 客户端是他们处理这个问题的更好方法吗?
答案 0 :(得分:8)
如果不将products
转换为数组怎么样?
var products = productDetails.ProductList.Products;
if (!$.isArray(products)) {
products = new Array(products);
}
... all logic here
答案 1 :(得分:3)
...创建一个函数?
function maybeArray(obj, func) {
if ($.isArray(obj))
$.each(obj, func);
else
func(0, obj);
}
...
maybeArray(productDetails.ProductList.Products, function(i, product) {
create DOM element for `product`;
});
答案 2 :(得分:0)
让它永远是一个数组。
if(!$.isArray(productDetails.ProductList.Products)){
productDetails.ProductList.Products = [productDetails.ProductList.Products];
}