如何将Javascript对象的内容复制到空对象?

时间:2015-03-27 15:22:50

标签: javascript json angularjs

我有一个Javascript对象(从数据库返回的JSON),用于Angular站点:

[{'widget_id':'1','widget_name':'Blue Widget','widget_description':'A nice blue widget','widget_discount':'20'},{'widget_id':'2','widget_name':'Red Widget','widget_description':'A fantastic red widget','widget_discount':'0'}]

我想在我的视图中使用它之前处理这些信息 - 比方说我想改变折扣或执行其他操作。因此,我想创建一个新对象,遍历我的JSON,并将JSON对象中的某些值写入新的空白对象。

现在我一直试图在我的Angular控制器中测试将旧数组中的一个值复制到一个新值:

WidgetSvc.fetchWidgets().success(function(response){
            var rawWidgets = response
            var widgetsOutput = {}
            for (var i in rawWidgets){
              widgetsOutput[i].widget_id = rawWidgets[i].widget_id
            }

但这会引发cannot set property 'widget_id' of undefined错误。我怀疑我没有正确初始化新对象。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您只是忘记在设置属性之前设置嵌套对象:

var rawWidgets = [{'widget_id':'1','widget_name':'Blue Widget','widget_description':'A nice blue widget','widget_discount':'20'},{'widget_id':'2','widget_name':'Red Widget','widget_description':'A fantastic red widget','widget_discount':'0'}];

var widgetsOutput = {}
for (var i in rawWidgets){
    widgetsOutput[i] = {}
    widgetsOutput[i].widget_id = rawWidgets[i].widget_id
}

console.log(widgetsOutput)

答案 1 :(得分:0)

JSON!= Javascript对象。您可以JSON.parse()将JSON转换为正确的Javascript对象:

WidgetSvc.fetchWidgets().success(function(response){
        var data = JSON.parse(response);

        // now you can do
        data[0].widget_discount = 10;
 }