我正在使用Lodash的_.find()方法找到一个对象,然后我试图覆盖该对象,就像这样......
taskToUpdate = _.find($scope.tasks, {ID: myID});
taskToUpdate = {};
这完全找到了对任务的引用,但是没有将它设置为空对象,它没有任何效果。
但是,如果我选择一个特定的属性并覆盖它,它就有效......
taskToUpdate = _.find($scope.tasks, {ID: myID});
taskToUpdate.title = "New title";
工作正常。我有一种感觉,这里的问题不是lodash,而是我对如何在javascript中的函数之间传递对象和引用的错误理解。
答案 0 :(得分:1)
那是因为您将局部变量taskToUpdate
设置为空对象,同时$scope.tasks
仍然保留对未更改对象的原始引用。
获得对象的引用后,您就可以获得indexOf
。
var index = _.indexOf($scope.tasks, taskToUpdate);
然后可以在$scope.tasks
$scope.tasks[index] = {};
此时$scope.tasks
中的引用将是一个空白的普通对象,但tasksToUpdate
将继续保持对象引用。您可以选择是否继续使用它。但是,一旦你结束了所有引用该taskToUpdate
对象的闭包,它就会不复存在。
我的猜测是你实际上想要从$scope.tasks
中删除引用,而不是只是删除对象引用。你可以做很多种方式,但这里有一个:
$scope.tasks = _.without($scope.tasks, taskToUpdate);