如何将json / object转换为数组进行循环

时间:2012-12-26 23:28:00

标签: javascript arrays json object

我有一个调用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循环,但它会产生错误,因为有时结果不是数组。那么,我再次检查它是否是一个数组?将结果推送到新阵列?什么会更好。感谢

2 个答案:

答案 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);

与创建冗余阵列的方法相比,这种方法的明显好处是,您不会创建冗余阵列,也不会修改您收到的数据。虽然在这个阶段,数据可能并不重要,但一般来说,在运行集成和回归测试时可能会给您带来更多麻烦。