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

How to convert json/object to array for looping

本文关键字:数组 循环 转换 object json      更新时间:2023-09-26

我有一个javascript应用程序,调用api, api返回json。对于json,我选择一个特定的对象,并循环遍历它。

我的代码流是这样的:服务调用-> GetResults循环遍历Results并构建Page

问题虽然,有时api只返回一个结果,所以这意味着它返回一个对象而不是数组,所以我不能通过结果循环。最好的解决办法是什么?

我应该转换我的对象,或单个结果到一个数组吗?放入/推入数组?还是应该执行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循环,但它会产生错误,因为有时结果不是一个数组。还是那句话,我要检查它是不是一个数组吗?推结果到一个新的数组?什么会更好。由于

如果您无法控制服务器端,您可以做一个简单的检查,以确保它是一个数组:

if (!(results.pages instanceof Array)) {
    results.pages = [results.pages];
}
// Do your loop here.

否则,理想情况下这应该发生在服务器上;它应该是契约的一部分,结果总是可以以类似的方式访问。

无论你对循环中的对象做了什么,都将其安排到一个单独的过程中,如果你发现对象不是数组,则直接对其应用该过程,否则,对该对象的每个元素多次应用该过程:

function processPage(page) { /* do something to your page */ }
if (pages instanceof Array) pages.forEach(processPage);
else processPage(pages);

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