0

我有一个 javascript 对象,我需要引用其中一个子对象的值。孩子应该是数组的一部分。

这有效:

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

如果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

在你的问题中:

我有一个 javascript 对象,我需要引用其中一个子对象的值。孩子应该是数组的一部分。

这有效:

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

但这不会:

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

这表明this.manager.response.highlighting[doc.id]引用的对象sentence_0002有一个名为“0”的属性,但它没有一个名为“0”的属性。

该对象可能是一个对象或数组(或任何其他对象,如函数甚至 DOM 对象)。请注意,在 javascript 中,数组只是具有特殊长度属性和一些方便的继承方法的对象,这些方法通常可以应用于任何对象。

因此,所引用的对象this.manager.response.highlighting[doc.id]是 Array 还是 Object 在上面没有区别,因为您所追求的属性似乎有一个普通的对象名称,而不是一个数字索引,如果它是一个 Array 并且正在被用作数组。

于 2012-04-30T03:56:37.980 回答
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 回答