修改JSON对象时,TypeError _______________不是函数

时间:2013-06-17 22:59:11

标签: javascript json object typeerror

所以我有一些我正在使用的现有Javascript。这是现有的JSON工作(修改和简化以保持可管理性):

{
"items": [
    {
        "id": "11",
        "type": "subType",
        "attributesList": {
            "atribute1": "1",
            "atribute2": "2"
        },
        "description": {
            "d1": "lorem ipsum",
            "d2": {
                "lorem ipsum 1": "li1 content",
                "lorem ipsum 2": "li2 content"
            }
        }
    }
]
}

针对现有JSON的一项操作是添加一个新的“项目”,如下所示:

{
"id": "12",
"type": "subType",
"attributesList": {
    "atribute1": "1",
    "atribute2": "2"
},
"description": {
    "d1": "lorem ipsum",
    "d2": {
        "lorem ipsum 1": "li1 content",
        "lorem ipsum 2": "li2 content"
    }
}
}

执行所有这些操作的代码非常冗长,但这是执行操作的行:

that.product.addItem(item.toObject());

所以,这很好用。但是我们有另一种需要以相同方式修改的JSON格式。新格式是:

{
"items": [
    {
        "id": "1",
        "type": "someType",
        "name": "item name",
        "items": [
            {
                "id": "11",
                "type": "subType",
                "attributesList": {
                    "atribute1": "1 attr",
                    "atribute2": "2 attr"
                },
                "description": {
                    "d1": "lorem ipsum",
                    "d2": {
                        "lorem ipsum1": "li1 content",
                        "lorem ipsum 2": "li2 content"
                    }
                }
            },
            {
                "id": "12",
                "type": "subType",
                "attributesList": {
                    "atribute1": "1 attr",
                    "atribute2": "2 attr"
                },
                "description": {
                    "d1": "lorem ipsum",
                    "d2": {
                        "lorem ipsum1": "li1 content",
                        "lorem ipsum 2": "li2 content"
                    }
                }
            }
        ],
        "quantity": 1
    }
]
}

如您所见,子类型现在嵌套在父类型下。所以我的想法是,要为这种新格式添加一个项目,我应该可以做一些事情(因为只有一个父母):

that.product.items[0].items.addItem(item.toObject());

但是当我尝试这样做时,我得到一个TypeError:

TypeError: that.product.items[0].items.addItem is not a function

当我同时输入两种类型时,它们都返回'对象',但显然我错过了一些东西。我很擅长像这样操纵JSON,所以我很难过。我走了几条转换路径并试图解决这个问题,我只是陷入困境。希望有人可以帮助我。

1 个答案:

答案 0 :(得分:3)

JavaScript数组没有addItem方法。请尝试使用push()

that.product.items[0].items.push(item.toObject());

假设其他一切正常,那么会将item.toObject()的结果添加到数组that.product.items[0].items的末尾。