2011-06-20 13 views
1

jsonオブジェクト配列の解析に取り組んでいるので、値が 'y'の場合、キーリストはコンマで区切られたリストで返され、htmlで返されます。インデックス位置でのJSONオブジェクト配列の解析

キー/値のペアをインデックス位置で参照したいのは、キー/値#13-39の値だけを返したいからです。

この問題を解決する最善の方法についてのご意見はありますか?

私はすでにいくつかのプロパティ(obj.address)にアクセスするためのjqueryマップ関数を持っています。しかし、私は正常に特定のキー名またはインデックスの位置を持つオブジェクトのプロパティを選択するためにフィルタやgrepを正常に使用することはできませんでした。任意の助け

[{"Name": "Name1", "Key1": "Y", "Key2": "Y", "Key3": "N", "Key4": "Y", "Key5": "N"}, 
{"Name": "Name2", "Key1": "N", "Key2": "Y", "Key3": "Y", "Key4": "N", "Key5": "N"}, 
{"Name": "Name3", "Key1": "N", "Key2": "Y", "Key3": "Y", "Key4": "Y", "Key5": "Y"}} 

ありがとう:

これは、配列は次のようになります!

+0

"Y"の値はどれですか?サンプルコードでいくつかを提供しました。あなたが表現する方法でデータをレンダリングするには、「Y」にする必要がありますか? –

+0

値が「y」のキーのいずれかが表示されます。コンマで区切られたリストは、配列の最初のオブジェクト、すなわち "Key1、Key2、Key4"になります – sharpiemarker1

+0

与えられた配列の期待される出力は?それは次のようなものでなければなりません: 'Name1:Key1、Key2、Key4; Name2:Key2、Key3; Name3:Key2、Key3、Key4、Key5'? – Xint0

答えて

0

jQueryの$.mapを使ってこれを行う方法を考え出すことができますが、個人的には純粋なJavaScriptの方法で考えるのが簡単です。 (など、"Key2"、あなたの鍵が実際に"Key1"命名されていない場合がありますが、あなたが連想配列中の位置でキーにアクセスしたい、これは信頼できるクロスブラウザの実装を持っていません。):

var bar = [ 
    {"Name": "Name1", "Key1": "Y", "Key2": "Y", "Key3": "N", 
        "Key4": "Y", "Key5": "N"}, 
    {"Name": "Name2", "Key1": "N", "Key2": "Y", "Key3": "Y", 
        "Key4": "N", "Key5": "N"}, 
    {"Name": "Name3", "Key1": "N", "Key2": "Y", "Key3": "Y", 
        "Key4": "Y", "Key5": "Y"} 
]; 
var parsed = {}; // this contains the result 
var MIN_KEY = 2; // set to 13 for your request 
var MAX_KEY = 4; // set to 39 for your request 

for (var i = 0, iLen = bar.length; i < iLen; i++) { 
    var baz = bar[i]; 
    var name; 
    var temp = []; 
    for (var key in baz) { 
    var keyNum = parseInt(key.replace("Key", "")); 

    // Get the name or add valid key to an array 
    if (key === "Name") { 
     name = baz[key]; 
    } else if (baz[key] === "Y" && keyNum >= MIN_KEY && keyNum < MAX_KEY) { 
     temp.push(key); 
    } 
    } 

    // Concatenates temp array like "Key1, Key2, Key3" 
    parsed[name] = temp.join(", "); 
} 

console.log(bar); 
console.log(parsed); 

キーを数えることによる別の実装(ブラウザ間で信頼性がない可能性があることに注意してください):

for (var i = 0, iLen = bar.length; i < iLen; i++) { 
    var counter = 0; 
    var baz = bar[i]; 
    var name; 
    var temp = []; 
    for (var key in baz) { 
    if (key === "Name") { 
     name = baz[key]; 
    } else if (baz[key] === "Y" && counter >= MIN_KEY && counter < MAX_KEY) { 
     temp.push(key); 
    } 
    counter++; 
    } 
    parsed[name] = temp.join(", "); 
} 
+0

実際、Key1、Key2などの名前は付けられていないので、インデックス位置からアクセスするための信頼できるクロスブラウザの方法はありませんか? – sharpiemarker1

+0

実際にはありません。 [ここにいくつかの情報があります。](forstループ)http://japan.internet.com/developerworks/mydeveloperworks/ja/library/ja/tutorial/6316618/do-javascript-arrays-and-objects-have-a-set-order/6316786#6316786) 'for'ループを使うことができますカウンタ変数を使って(上記の私の編集を参照してください)、それに対してテストしてください。本当の標準がなく、動作しないかもしれないことに留意してください。 – brymck

+0

[OK] - ありがとう、そのリンクです。私は何が半無作為に戻って来たように思えたのだろうと思っていた...今私は知っている。 yrヘルプに感謝します。 – sharpiemarker1

関連する問題