1

APIを呼び出すJavaScriptアプリケーションがあり、APIはjsonを返します。json を使用して、特定のオブジェクトを選択し、それをループします。

私のコード フローは次のようなものです: サービス呼び出し -> GetResults 結果をループしてページを構築します。

ただし、問題は、API が 1 つの結果のみを返す場合があるため、配列ではなくオブジェクトを返すことを意味するため、結果をループできません。これを回避する最善の方法は何ですか?

オブジェクトまたは単一の結果を配列に変換する必要がありますか? 配列内に配置/プッシュしますか? または、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 ループを使用するだけで結果をループしますが、結果が配列でない場合があるため、エラーが発生します。繰り返しますが、配列かどうかを確認しますか? 結果を新しい配列にプッシュしますか? 何が良いでしょうか。ありがとう

4

2 に答える 2

6

サーバー側を制御できない場合は、簡単なチェックを行って配列であることを確認できます。

if (!(results.pages instanceof Array)) {
    results.pages = [results.pages];
}

// Do your loop here.

それ以外の場合、これは理想的にはサーバー上で発生するはずです。結果が常に同様の方法でアクセスできることは、契約の一部である必要があります。

于 2012-12-26T23:38:39.707 に答える
0

ループ内のオブジェクトに対して行うことはすべて別の手順に配置し、オブジェクトが配列ではないことがわかった場合は、その手順を直接適用するか、それ以外の場合は、そのオブジェクトの各要素に複数回適用します。

function processPage(page) { /* do something to your page */ }

if (pages instanceof Array) pages.forEach(processPage);
else processPage(pages);

冗長配列を作成する方法と比較したこのアプローチの明らかな利点は、冗長配列を作成せず、受け取ったデータを変更しないことです。この段階では、データが完全であることは重要ではないかもしれませんが、一般に、統合および回帰テストを実行するときに、より多くの問題を引き起こす可能性があります。

于 2012-12-27T14:03:35.847 に答える