gpt4 book ai didi

javascript - 为什么 Javascript 对象没有改变?

转载 作者:行者123 更新时间:2023-12-03 05:02:59 25 4
gpt4 key购买 nike

有人可以向我解释一下这种奇怪的 js 行为吗?

所有这些都在 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;

我不明白这个...

最佳答案

您正在用新值覆盖变量,并且对先前值的任何引用都消失了。

您可以使用angular.extend()更新现有对象,而不是用新对象覆盖原始对象值。

angular.extend(_category, change.doc);

关于javascript - 为什么 Javascript 对象没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42140479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com