JavaScript выбирает объект Arraylike? - PullRequest
0 голосов
/ 25 марта 2019

Проблема заключается в следующем: у меня есть файл JSON, в котором есть объекты со следующим именем: "item0": { ... }, "item1": { ... }, "item2": { ... }.Но я не могу получить к ним доступ при использовании метода if.

Что я сделал до сих пор:

$.getJSON('/assets/storage/items.json', function(data) {
    jsonStringify = JSON.stringify(data);
    jsonFile = JSON.parse(jsonStringify);

    addItems();
});

var addItems = function() {
    /* var declarations */

    for (var i = 0; i < Object.keys(jsonFile).length; i++) {
        path = 'jsonFile.item' + i;
        name = path.name;
        console.log(path.name);
        console.log(path.type);
    }

}

Если я укажу console.log path.name, он возвращает неопределенное значение.Но если я введу jsonFile.item0.name, он вернет значение.Итак, как я могу использовать путь к строке, чтобы он обрабатывался как объект, или есть другой способ присвоения имен элементам json.

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Как говорили другие 'jsonFile.item' + i не извлекает что-либо из jsonFile: это просто строка.

Другие проблемы:

  • Нет смысла сначала переводить строку в строкуданные, а затем проанализировать его снова.Это движется вперед и назад, чтобы оказаться там, где вы уже были: data - это объект, с которым вы хотите работать *
  • Не называйте ваши данные jsonFile.Это объект, а не JSON.JSON это текст.Но из-за приведенного выше замечания вам не нужна эта переменная
  • Объявите свои переменные с помощью var, let или const и избегайте глобальных переменных.
  • Используйте обещание-подобный синтаксис ($.getJSON( ).then)
  • Итерация свойств объекта без предположения, что они называются item0, item1, ...

Рекомендуемый код:

$.getJSON('/assets/storage/items.json').then(function(data) {
    for (const path in data) {
        console.log(data[path].name, data[path].type);
    }
});
0 голосов
/ 25 марта 2019

Боюсь, вы не можете ожидать, что строка будет вести себя как объект.

Что вы можете сделать, это:

path = `item${i}`
name = jsonFile[path].name
0 голосов
/ 25 марта 2019

То, что вы хотите - это использовать обозначение объекта, используя динамическое строковое значение в качестве ключа вместо ключа объекта.Таким образом, вместо использования чего-то вроде object.dynamicName вы должны использовать object[dynamicName].

Так что в вашем примере это будет так.

path = 'item' + i;
jsonFile[path].name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...