1

次のような JSON 応答があります。

 var errorLog = "[[\"comp\",\"Please add company name!\"],
                 [\"zip\",\"Please add zip code!\"],
                  ...

私はこのようにデシリアライズしています:

 var log = jQuery.parseJSON(errorLog);

これで、次のような要素にアクセスできます。

 log[1][1] > "Please add company name"

質問:
最初の値compがある場合、次のようにして 2 番目の値を直接取得する方法はありますか?

 log[comp][1]

配列全体をループすることなく。

手伝ってくれてありがとう!

4

4 に答える 4

3

いいえ。最初の配列の「値」(最初の次元、または最初の行と言うべきかもしれません)もkeyでない限り。つまり、次のような場合を除きます。

log = {
    'comp': 'Please add a company name'
                   .
                   .
                   .
}

今、log['comp']またはlog.comp合法です。

于 2012-06-08T16:46:32.647 に答える
1

どういうわけか配列をループしようとしても、jQuery などのツールによって少しわかりにくくなります。

次のように提案されているように、配列からオブジェクトを作成できます。

var objLookup = function(arr, search) {
    var o = {}, i, l, first, second;

    for (i=0, l=arr.length; i<l; i++) {
        first = arr[i][0]; // These variables are for convenience and readability.
        second = arr[i][1]; // The function could be rewritten without them.

        o[first] = second;
    }

    return o[search];
}

しかし、より迅速な解決策は、配列をループして、見つかったらすぐに値を返すことです。

var indexLookup = function(arr, search){
   var index = -1, i, l;

    for (i = 0, l = arr.length; i<l; i++) {
        if (arr[i][0] === search) return arr[i][1];
    }

    return undefined;
}

次に、コード内でこれらの関数を次のように使用するだけで、すべてのコードの途中でループする必要がなくなります。

var log = [
    ["comp","Please add company name!"],
    ["zip","Please add zip code!"]
];

objLookup(log, "zip"); // Please add zip code!
indexLookup(log, "comp"); // Please add company name!

これらが使用されていることを示すjsfiddleを次に示します。

于 2012-06-08T17:20:22.430 に答える
1

これを行うには 2 つの方法がありますが、どちらもループを回避できません。1 つ目は、アイテムにアクセスするたびに配列をループすることです。

var val = '';
for (var i = 0; i < errorLog.length; i++) {
    if (errorLog[i][0] === "comp") {
        val = errorLog[i][1];
        break;
    }
}

もう 1 つは、配列をオブジェクトに変換し、オブジェクト表記でアクセスすることです。

var errors = {};
for (var i = 0; i < errorLog.length; i++) {
    errors[errorLog[i][0]] = errorLog[i][1];
}

その後、 で関連する値にアクセスできますerrors.comp

一度しか見ない場合は、おそらく最初のオプションの方が適しています。2 回以上参照する可能性がある場合は、(a) ループを 1 回だけ実行する必要があるため、より効率的であり、(b) ループするコードを繰り返さないため、2 番目のシステムを使用することをお勧めします (c ) 何をしようとしているかはすぐにわかります。

于 2012-06-08T16:50:07.323 に答える
0

jQuery のgreporinArrayメソッドを見たことがありますか?

この議論を見る

DOM と同様の方法で多次元配列をクエリする jquery 機能はありますか?

于 2012-06-08T16:48:28.187 に答える