0

JavaScript オブジェクトがあり、その子の 1 つの値を参照する必要があります。子は配列の一部である必要があります。

これは機能します:

this.manager.response.highlighting[doc.id]['sentence_0002']

しかし、これはしません:

this.manager.response.highlighting[doc.id][0]

どの数字が返ってくるか分からないsentence_000*ので、その配列番号で参照したい。

this.manager.response.highlighting[doc.id].length

どちらも何も返しません。

以下は、javascript オブジェクトに変換された xml ドキュメントの一部です。

<response>
  <lst name="highlighting">
    <lst name="http://www.lemonde.fr/international/">
      <arr name="sentence_0005">
        <str> puni pour sa gestion de la crise Geir Haarde a été condamné pour avoir manqué aux devoirs de sa </str>

アクセスする必要があるのは、 の値です<str>doc.idに正常に設定されましたhttp://www.lemonde.fr/international/

4

3 に答える 3

0

あなたの質問で:

JavaScript オブジェクトがあり、その子の 1 つの値を参照する必要があります。子は配列の一部である必要があります。

これは機能します:

this.manager.response.highlighting[doc.id]['sentence_0002'] 

しかし、これはしません:

this.manager.response.highlighting[doc.id][0] 

this.manager.response.highlighting[doc.id]これは、参照するオブジェクトにという名前のプロパティsentence_0002があり、「0」という名前のプロパティがないことを示しています。

そのオブジェクトは、オブジェクトまたは配列 (または、関数や DOM オブジェクトなどの他のオブジェクト) である可能性があります。JavaScript では、配列は、特別な長さのプロパティと、ほとんどのオブジェクトに一般的に適用できるいくつかの便利な継承メソッドを持つ単なるオブジェクトであることに注意してください。

したがって、参照されてthis.manager.response.highlighting[doc.id]いるオブジェクトが配列であるかオブジェクトであるかは、上記の違いはありません。目的のプロパティには、配列であった場合に期待される数値インデックスではなく、プレーンなオブジェクト名があるように見えるためです。配列として使用されます。

于 2012-04-30T03:56:37.980 に答える
0

highlighting[doc.id]のような名前のプロパティがある場合、そのプロパティsentence_xyzには位置的な順序はありませんfor..inが、ループを使用して存在するキーを見つけることができます。

var key, val;
var obj = this.manager.response.highlighting[doc.id];
for (key in obj) {
    // Here, `key` will be a string, e.g. "sentence_xyz", and you can get its value
    // using
    val = obj[key];
}

他のプロパティを除外する必要がある場合があります。これは、通常の文字列メソッドで実行できます。たとえば、次のようになります。

for (key in obj) {[
    if (key.substring(0, 9) === "sentence_") {
        // It's a sentence identifier
    }
}

hasOwnPropertyこれも役立つかもしれませんが、これは JSON テキスト応答からデシリアライズされたオブジェクト グラフであると推測していますが、その場合hasOwnPropertyは実際には関係ありません。

于 2012-04-29T22:25:42.413 に答える
0

オブジェクトの長さを見つけることができますが、インデックスは数値ではなく、「sentence_000*」になります。

そうするために :

 var obj = this.manager.response.highlighting[doc.id],
     indexes = Object.getOwnPropertyNames(obj),    
     indexLength = indexes.length;
 for(var counter = 0; counter < indexLength; counter++){
    obj[indexes[counter]] == val // obj[indexes[counter]] is same as this.manager.response.highlighting[doc.id]['sentence_000*'] 
 }
于 2014-04-17T14:49:22.787 に答える