0

重複の可能性:
javascriptオブジェクトの配列内のIDでオブジェクトを検索

だから私はこれを持っています:

mapArray=
[{"Title":"crop_rotation","subs":"5,6,7,10"},
{"Title":"cover_crops","subs":"2,5,7,8,9,13,14"},
{"Title":"binary_wetlands","subs":"1,2,3,4,5,6,7,8,9,10,11"}]

タイトルに基づいてsubs値にアクセスしようとしています。やっています

listofSubs=mapArray["crop_rotation"]("subs");

何も返されません。ここで何が欠けていますか?そのリストを取得して文字列に変換する必要がありますが、オブジェクトがすでに解析されているので、文字列として出力されると思いますか?前もって感謝します

4

4 に答える 4

3

まず、特定のタイトルのオブジェクトを見つける必要があります。これを行うには、配列を反復処理し、各オブジェクトTitleを値と比較する必要があります。

function find(arr, key, value) {
    for(var i = 0, l = arr.length; i < l; i++) {
        if(arr[i][key] === value)) {
            return arr[i];
        }
    }
    // return {}; // if you would want it null-safe
}

subs次に、対応するプロパティにアクセスできます。

var obj = find(mapArray, 'Title', 'crop_rotation');
if(obj) {
    var listofSubs = obj.subs;
}

コードが機能しない理由の説明:

mapArray["crop_rotation"]("subs");
//      |-      1      -|-   2  -|
  • |1|crop_rotationのオブジェクトのプロパティにアクセスしようとしますmapArray。配列にはそのようなプロパティがなく、あなたの場合、オブジェクトはありません。プロパティの 1 つのcrop_rotationです。
  • |2|関数呼び出しです。によって参照される関数を呼び出そうとし、最初の引数としてmapArray["crop_rotation"]渡します。関数でない場合(あなたの場合のように)"subs"、エラーがスローされます。mapArray["crop_rotation"]

さらに詳しい情報:

于 2012-10-10T18:14:40.937 に答える
0

alert(mapArray[0].Title)= "crop_rotation"

于 2012-10-10T18:15:07.487 に答える
0

あなたが持っているのは、そこにあるオブジェクトの配列です。また、配列は数値でインデックス付けされます。したがって、探している値を取得するには:

mapArray;    // returns array of objects
mapArray[0]; // returns first object in the array

// returns the value of the `"subs"` key in the first object in the array
mapArray[0]['subs'];

これはタイトルで見つけられないことに注意してください。そのためにはもう少しロジックが必要です。それを行うには、Felix Klingの回答を参照してください。

于 2012-10-10T18:15:08.963 に答える
0

その要素のフィールドでリスト(配列)にアクセスするだけです。目的のために list(array) という名前が付けられています-位置以外ではインデックスが付けられていません。したがって、この mapArray[0] のようなリストにアクセスできます。タイトルでアクセスしたい場合は、このような構造が必要です

{ "crop_rotation": ...,
  "cover_crops" :....,
  .... 
}

入力が修正されていて変更できない場合は、ニーズに合わせて前処理する必要があります。したがって、配列を反復処理して、"Title"値を新しい辞書のキーに変更する辞書を作成する必要があります。

于 2012-10-10T18:18:34.553 に答える