JavaScript将对象推入数组更改了对象的值
我不确定我应该用什么关键词来搜索我的问题。但是我已经在墙上敲了三个小时的头,想看看这里出了什么问题。它只是简单地将对象推入数组。问题是,当我尝试JavaScript将对象推入数组更改了对象的值,javascript,arrays,angularjs,object,Javascript,Arrays,Angularjs,Object,我不确定我应该用什么关键词来搜索我的问题。但是我已经在墙上敲了三个小时的头,想看看这里出了什么问题。它只是简单地将对象推入数组。问题是,当我尝试console.log数组值时,两个对象键的值被更改。我在AngularJS控制器中写这篇文章 下面是我在服务上放置的示例对象: onbd.data.add = { predefined: [{ activity : 'morning jog', purpose : 'grow', days
console.log
数组值时,两个对象
键的值被更改。我在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'
}]
};
在controller中,以下是在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);
};
以下是我从控制台.log('newAct',newAct)获得的信息:
}
这是正确的,但这是我在console.log('list',th.list)时得到的结果代码>:
请注意,键日期
和目的
已更改。只有当我执行th.setActivity
函数时才会发生这种情况。有没有想过为什么会有这种奇怪的行为
非常感谢。我找到了答案,感谢@tymeJV指出控制台正试图使对象引用保持最新。我决定一个接一个地console.log()
@tymeJV正确地认为,值的不同是其他一些函数修改对象的结果
我的错误是,修改函数希望接收一个对象
作为值,而不是字符串
,就像我在服务中所说的那样。我已经更新了它,现在它可以工作了
愚蠢的我,我知道:)对象是通过引用传递的,控制台(在chrome中)会尽力提供帮助并保持引用的最新状态。这些值是否在其他地方被修改?不,它们没有被修改。我还有另一个类似的函数,它将处理从表单
输入的数据,而不是服务上预定义的数据。但是这一个工作没有任何问题。由于您通过异步的ajax获取数据,我想您需要。您能在th.list.push(newAct)之前检查console.log('newAct',newAct)吗;line@Joy我想你误解了,我没有使用AJAX来提供预定义的数据,它是在服务上硬编码的,用于在控制器之间共享。但是这些数据稍后将通过AJAX进行POST
ed,这就是我在服务器端得到错误的原因,因为键的值发生了更改。
newAct Object {
activity: "morning jog",
purpose: "grow",
day: "0 1 2 3 4 5 6",
start: "05:30",
stop: "06:00"
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]