2012-04-29 2 views
0

У меня есть объект javascript, и мне нужно указать значение одного из его детей. Ребенок должен быть частью массива.Справочная информация об объекте JavaScript 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 

ничего не возвращает.

Вот часть XML-документа, который был превращен в JavaScript Object:

<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/.

+0

Было бы полезно, чтобы показать объект javascript, созданный из XML. – RobG

ответ

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 на самом деле не входит в него.

+0

@ T.J. Crowder Использование key & val работало как шарм. Теперь имеет смысл. Спасибо за ответ! – Ramsel

+0

@ TJCrowder- «0» не будет «работать», даже если объект является массивом, если значение было присвоено свойству с именем «предложение_0002», а не одному из них «0». Я подозреваю, это то, что OP открыл для использования в. – RobG

+0

@ RobG: Да, не знаю, где была моя голова, и «если это объект без массива». Неважно, это массив или нет! :-) –

0

В вашем вопросе:

У меня есть JavaScript Object и мне нужно сослаться на значение одного из его детей. Ребенок должен быть частью массива.

Это работает:

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 массивы - это просто объекты со специальным свойством length и некоторые удобные унаследованные методы, которые в основном могут быть применены к любому объекту в целом.

Значит ли объект, на который ссылается this.manager.response.highlighting[doc.id], представляет собой массив или объект, не имеет никакого отношения к указанному выше, поскольку свойство, за которым вы находитесь, похоже, имеет простое имя объекта, а не числовой индекс, как можно было бы ожидать, если бы это было массив и использовался как массив.

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*'] 
} 
Смежные вопросы