誰かが私にこの奇妙なjsの動作を説明できますか?Javascriptオブジェクトが変更されなかった理由
このすべてはAngularJSです。
私は単にそのIDによって配列から要素を返すために私のメインapp.jsでのヘルパー関数を持っている:
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