下划线/低位传递对象的覆盖,我无法覆盖

时间:2014-03-29 17:25:10

标签: javascript underscore.js lodash

我正在使用Lodash的_.find()方法找到一个对象,然后我试图覆盖该对象,就像这样......

taskToUpdate = _.find($scope.tasks, {ID: myID});
taskToUpdate = {};

这完全找到了对任务的引用,但是没有将它设置为空对象,它没有任何效果。

但是,如果我选择一个特定的属性并覆盖它,它就有效......

taskToUpdate = _.find($scope.tasks, {ID: myID});
taskToUpdate.title = "New title";

工作正常。我有一种感觉,这里的问题不是lodash,而是我对如何在javascript中的函数之间传递对象和引用的错误理解。

1 个答案:

答案 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);
相关问题