JavaScript将对象推入数组更改了对象的值

时间:2015-07-28 15:08:09

标签: javascript arrays angularjs object

我不确定我应该用什么关键字来解决我的问题。但是我一直在墙上敲了三个小时试图看看这里有什么问题。它只是一个简单的推送对象到数组。问题是,当我尝试console.log数组值时,有两个object键'价值改变了。我在AngularJS控制器中写这个。

以下是我提供服务的示例对象:

onbd.data.add = {
    predefined: [{
        activity : 'morning jog',
        purpose  : 'grow',
        days     : '0 1 2 3 4 5 6',
        start    : '05:30',
        stop     : '06:00',
        meta     : 'repeats everyday on 5:30 AM for half an hour'
    }]
};

在控制器中,这是在ng-click事件上调用的函数,它会将所述数据从服务推送到AJAX数据数组中:

th.setActivity = function (data) {
    // the data is one of the object inside the predefined
    // key from the service above
    var newAct = {
        activity : data.activity,
        purpose  : data.purpose,
        day      : data.days,
        start    : data.start,
        stop     : data.stop
    };
    th.list.push(newAct);
};

以下是我从console.log('newAct', newAct)获得的内容:

newAct Object {
    activity: "morning jog",
    purpose: "grow",
    day: "0 1 2 3 4 5 6",
    start: "05:30",
    stop: "06:00"

}

哪个是正确的,但这是我在console.log('list', th.list);时得到的:

list [Object]
    0: Object
        $$hashKey: "object:136"
        activity: "morning jog"
        day: "0 1 2 3 4 5 6"
        purpose: "grow"
        start: "05:30"
        stop: "06:00"
    length: 1
    __proto__: Array[0]

请注意,密钥daypurpose已更改。仅当我执行th.setActivity函数时才会发生这种情况。有什么想法为什么会出现这种奇怪的行为?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我想通了,感谢@tymeJV指出控制台试图让对象引用保持最新的事实。我决定逐一console.log()找到问题所在。 @tymeJV是正确的,不同的值是修改对象的其他一些函数的结果。

我的错误是,修改函数希望接收object作为值而不是string,就像我在服务中所说的那样。我已更新它,现在它可以工作。

愚蠢的我,我知道:)。