2014-03-29 50 views
0

我使用Lodash的_.find()方法來查找對象,然後嘗試覆蓋該對象,像這樣...下劃線/ lowdash傳遞對象的引用我不能覆蓋

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

這會完美地找到對任務的引用,但不會將其設置爲空對象,它不起作用。

但是,如果我選擇一個特定的屬性和覆蓋它,它的工作原理...

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

這工作正常。我有一個感覺,這裏的問題不是lodash,但我對JavaScript中的函數之間如何傳遞對象和引用的理解很差。

回答

1

這是因爲您將本地變量taskToUpdate設置爲空對象,同時$scope.tasks仍保留對未改變對象的原始引用。

一旦你有了對象的引用,你就可以得到indexOf

var index = _.indexOf($scope.tasks, taskToUpdate); 

然後就可以空出在$scope.tasks

$scope.tasks[index] = {}; 

對象引用此時在$scope.tasks參考將是一個空白的普通對象,但tasksToUpdate將繼續持有該對象的引用。您可以選擇在這一點繼續使用它,或不。但是,一旦你結束了所有關閉該對象的閉包,它將不復存在。

我的猜測是,您實際上想要從$scope.tasks中刪除引用,而不是僅刪除對象引用。您可以通過多種方式做到這一點,但這裏有一個:

$scope.tasks = _.without($scope.tasks, taskToUpdate); 
+0

謝謝,那很好。我認爲這是問題,但不知道如何獲得實際的對象來操縱它。 IndexOf是答案。 – jonhobbs