1

重複の可能性:
ネストされたデータ構造/ JSONがありますが、特定の値にアクセスするにはどうすればよいですか?

鳥の種のリストを表すJSONがあります。各鳥はJSONのオブジェクトです。各オブジェクト内には、場所を表すフィールドがあります。場所は、['P1UBA'、'P1UBC'など]のように英数字でコード化されます。これらのフィールドの値1は存在を表し、0は不在を表します。

以下のコードは、これらのオブジェクトの1つを示しています(JSON全体に150があります)。

[
    {
    "Species": "AMAV",
    "Common Name": "AMERICAN AVOCET",
    "Order": "Shorebirds",
    "Family": "Avocets",
    "P1UBA": "0",
    "P1UBC": "1",
    "P1UBF": "0",
    "P1UBG": "0",
    "P1ABA": "0",
    "P1ABC": "0",
    "P1ABF": "1",
    "P1ABFb": "0",
    "P1ABG": "0",
    "P1USA": "0",
    "P1USC": "0",
    }
]

このオブジェクトを検索して場所fields==1を返すにはどうすればよいですか?理想的には、これらのフィールドの文字列である新しい配列を作成します== 1

上記のオブジェクトを使用すると、次の新しい文字列が生成されます。

var birdsMatch=['P1UBC','P1ABF']

jqueryを使用したいのですが、より効率的な場合は純粋なjavascriptソリューションを利用できます

4

4 に答える 4

1

各鳥オブジェクトがBirdsという名前の配列にあるとすると、以下が機能します。

$(data.Birds).each(function(index, element){
    if(element.value == '1')
        alert("FOUND BIRDS IN " + element.name);
})
于 2013-01-23T19:46:06.693 に答える
1
var attr, result_arr = [];

for (attr in birdObj){
    if (birdObj[attr] === "1"){
        result_arr.push(attr);
    }
}

ここで、birdObjは上記のobjの例に似ています。

于 2013-01-23T19:47:34.387 に答える
1

すべての鳥をループしてから、各鳥のすべてのプロパティをループして場所を収集する必要があります(varbirdsに解析されたJSONが含まれていると仮定します)。

var birdsMatch = {};
for(var i=0; i<birds.length; i++) {
    // Create an empty array to keep locations found for each species
    birdsMatch[birds[i].Species] = []; 
    for(var loc in birds[i]) {
        if(birds[i][loc] === 1) {
            // Found! Add location to the correct species array
            birdsMatch[birds[i].Species].push(loc);
        }
    }
}

最後に、birdsMatchオブジェクトは次のようになります。

{
    AMAV : ['P1UBC','P1ABF'],
    OTHER_SPECIES : [], // not found in any locations
    YET_ANOTHER : ['LOC1']
    // ...
}
于 2013-01-23T19:49:46.990 に答える
1

jQuery.mapの使用 :

var birds = $.map(birdObj, function(value, key) { 
  return value === '1' ? key : null; 
});

//birds => ["P1UBC", "P1ABF"]
于 2013-01-23T19:54:58.687 に答える