有人能解释我这个奇怪的js行为吗?为什么Javascript对象没有改变?
所有这一切都在AngularJS中。
我在我的主要app.js辅助函数来简单地从一个阵列通过id返回元素:
var MyLib = MyLib || {};
MyLib.helpers = {
find: function(needle, stack) {
for (var i = 0; i < stack.length; i++) {
if(stack[i]._id === needle)
return stack[i];
}
return false;
}
}
然后,我有工厂和函数来处理数据库变更:
// categories are grabbed from db
var categories = [some array of objects];
// change is object returned from database that has all info about object as well as new object itself
function handleChange(change) {
var _category = MyLib.helpers.find(change.id, categories);
// if deleted, that part is ok
if(change.deleted) {
var idx = categories.indexOf(_category);
if(idx !== -1) {
categories.splice(idx, 1);
}
} else {
// if updated that part is weird
if(_category) {
_category = change.doc;
}
// if newly added that part is ok
else {
categories.push(angular.copy(change.doc));
}
}
}
为什么当我尝试更新从类别中获取的元素时,数组不会在类别数组中更新?
// categories ARE NOT updated after this
_category = change.doc;
,只有当我指的是通过分类指标是这样的:
// categories ARE updated after this although _category is returned from this array by index (find function)
var idx = categories.indexOf(_category);
categories[idx] = change.doc;
我不明白这个...
你只是覆盖变量的新值的值的现有对象覆盖原始对象的价值。参考之前的对象值已经消失 – charlietfl