我有一个调用api的javascript应用程序,api返回json。使用json,我选择一个特定的对象,然后遍历它。
我的代码流是这样的: 服务电话 - > GetResults 循环结果并构建页面
问题是,有时api只返回一个结果,这意味着它返回一个对象而不是一个数组,所以我不能循环遍历结果。什么是解决这个问题的最佳方式?
我应该将我的对象或单个结果转换为arrary吗?将它/推入阵列?或者我应该做一个typeof并检查元素是否是一个数组,然后进行循环?
感谢您的帮助。
//this is what is return when there are more than one results
var results = {
pages: [
{"pageNumber":204},
{"pageNumber":1024},
{"pageNumber":3012}
]
}
//this is what is returned when there is only one result
var results = {
pages: {"pageNumber": 105}
}
我的代码循环遍历结果,仅使用for循环,但它会产生错误,因为有时结果不是数组。那么,我再次检查它是否是一个数组?将结果推送到新阵列?什么会更好。感谢
答案 0 :(得分:6)
如果你无法控制服务器端,你可以做一个简单的检查,以确保它是一个数组:
if (!(results.pages instanceof Array)) {
results.pages = [results.pages];
}
// Do your loop here.
否则,理想情况下应该在服务器上进行;它应该是合同的一部分,结果总是可以以类似的方式访问。
答案 1 :(得分:0)
将您对循环内对象所做的任何操作安排到一个单独的过程中,如果您发现该对象不是数组,请直接将该过程应用于该过程,否则,将该过程多次应用于该对象的每个元素: / p>
function processPage(page) { /* do something to your page */ }
if (pages instanceof Array) pages.forEach(processPage);
else processPage(pages);
与创建冗余阵列的方法相比,这种方法的明显好处是,您不会创建冗余阵列,也不会修改您收到的数据。虽然在这个阶段,数据可能并不重要,但一般来说,在运行集成和回归测试时可能会给您带来更多麻烦。