0

MVC (C#) からビューにオブジェクトをバインドするアルゴリズムがあります。キーとデータは何でもかまいません。これは実装者次第です。

私が抱えている問題は、JSON 文字列内の何かが配列か単純な文字列かを判断できないことです。次のコードは再帰的に機能します。配列の場合は、さらに深く掘り下げる必要があります。それ以外の場合は、キーと値に基づいて見つかった値をバインドします。

function constructView(data)
{
    for(var key in data)
    {
        if (data[key].length > 1)
        {
            var count = 0;

            while (count < data.length)
            {
                constructView(data[count]);
                count++;
            }
        }
        $("#" + key).html(data[key]);
    }
}

これは単なるプロトタイプであるため、現時点ではコンポーネントを生成せず、バインディングのみを行います。

さて、問題は次のとおりです。

通り過ぎると

{"data":"this is a response","strings":["test1","test2"]}

長さとして 18 と 2 を返します。これは、どちらも技術的には有効な長さの配列であるためです。

アイテムの長さを取得する方法はありますか? 単一の文字列を 1 つの項目と見なし、配列をそれぞれの項目数と見なす場所は?

JSON 配列が正しく渡されていることを確認できます。

どんな助けでも大歓迎です!

4

4 に答える 4

4
Array.isArray(x)

配列をチェックしますが、従来のブラウザーをサポートする必要がある場合は、ポリフィル (非常に簡単に見つけることができます) が必要になります。

typeof x === "string"

文字列を示します

于 2013-05-10T01:07:55.210 に答える
1

最新の ES5 互換の実装では、次のものがありますArray.isArray

var a = [];
Array.isArray(a); // true

古い実装では、この醜い回避策が必要です:

function isArray(a) {
    return ({}).toString.call(a) === "[object Array]";
    // or: 
    // return Object.prototype.toString.call(a) === "[object Array]";
}
于 2013-05-10T01:08:08.183 に答える
0

他の回答を参照してください。ただし、ポリフィルについて心配したくない場合は、すでに jQuery を使用しているようです (を使用しています)。jQuery関数$(...).html(...)を使用してみませんか?$.isArray()

于 2013-05-10T01:08:51.307 に答える
0

JQuery を使用しているので、以下を使用できます。

if ($.type(data[key])==="array")
于 2013-05-10T01:09:39.987 に答える