JavaScript选择类对象数组?

时间:2019-03-25 18:29:23

标签: javascript json object

问题如下: 我有一个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 个答案:

答案 0 :(得分:1)

正如其他人所述,'jsonFile.item' + i并未从jsonFile检索任何内容:它只是一个字符串。

其他问题:

  • 首先对数据进行字符串化然后再对其进行解析是没有意义的。来回移动到您已经去过的地方:data是您要使用的对象
  • 不要命名您的数据jsonFile。它是一个对象,而不是JSON。 JSON是文本。但是由于上述原因,您不需要此变量
  • 使用varletconst声明变量,并避免使用全局变量。
  • 使用类似于承诺的语法($.getJSON( ).then
  • 迭代对象属性,而不假定它们被称为item0item1,...

建议的代码:

$.getJSON('/assets/storage/items.json').then(function(data) {
    for (const path in data) {
        console.log(data[path].name, data[path].type);
    }
});

答案 1 :(得分:0)

您想要的是使用动态字符串值作为键而不是对象键的对象表示法。因此,您可以使用object.dynamicName来代替object[dynamicName]之类的东西。

所以在您的示例中就是这样。

path = 'item' + i;
jsonFile[path].name

答案 2 :(得分:0)

恐怕您不能期望字符串的行为像对象一样。

您可以执行以下操作:

path = `item${i}`
name = jsonFile[path].name