Я невежественен. У меня есть такая строка JSON, которую мне нужно проверить на наличие «свойства» (postsome в следующем примере):

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}]

Там может быть любое количество индексов ("indexAB", "index_random") с n объектами внутри.

Мне нужно "найти" мое свойство postsome, но я не могу заставить его работать, потому что я борюсь с правильным способом доступа к объекту.

Так:

for (var i = 0, l = indices.length; i < l; i += 1) {

        doc._id = "postsome",
        index_name = "indexAB";

    indices[i]["indexAB"];             // ok, returns object on correct iteration
    indices[i][index_name];            // undefined
    indices[i].indexAB[0][doc._id]     // ok, returns undefined or keywords
    indices[i][index_name][0][doc._id] // undefined 
}

< Сильный > Вопрос :
Как я могу получить доступ к вложенному объекту в цикле, используя имя переменной index_name?

4
frequent 23 Янв 2013 в 12:58

2 ответа

Лучший ответ

Это не прямой ответ на ваш вопрос, но я считаю, что на самом деле это может помочь вам больше, чем дать вам сложный способ доступа к значениям в вашем объекте.

Если вместо этого объекта JSON:

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}];

У вас была бы эта гораздо более простая структура данных:

var index_file =
{
  "indexAB": {
    "postsome": ["keyword_abc", "keyword_def"],
    "testsome": ["keyword_111", "keyword_222"]
  },
  "index_random": {
    "postsome": ["keyword_abc"]
  }
};

Тогда было бы намного легче получить доступ, используя просто:

var value = index_file.indexAB.postsome[0]; // no loops, no nothing
//  value == "keyword_abc"

См. ДЕМО .

Я думаю, что вы должны изменить свою модель данных, потому что в настоящее время она очень далека от идеи JSON и всегда будет очень трудно получить доступ к данным в ней.

2
rsp 23 Янв 2013 в 09:14

index_name равен undefined, потому что строка перед этим вызывает ошибку

doc._id = "postname" // this causes an error

Просто используйте простую строку

doc = "postname"
0
Aditya Manohar 23 Янв 2013 в 09:04