updating a single value in localstorage
所以我有这段代码来更新一个人离开本地存储的日期和时间
1 2 3 4 5 6 7 | $scope.visitorout = function(){ var dateout1 = new Date(); var signout = JSON.parse(localStorage["allVisitors"]); for(var i=0;i<signout.length;i++) if (signout[i].id===signout[i].id) signout[i].dateout = dateout1; localStorage["allVisitors"] = JSON.stringify(signout); }; |
但是每当我调用函数时,它都会更改本地存储中每一件事情的所有dateout值,但我只希望它更改一个值。
我已经将代码修改为:
1 2 3 4 5 6 7 8 9 10 11 12 | $scope.visitorOut = function(id){ var allVisitors = JSON.parse(localStorage["allVisitors"]); var visitor; for(var i=0; i<allVisitors.length; i++){ visitor = allVisitors[i]; if (allVisitors[i].id === visitor.id) { visitor.dateout = new Date(); console.log(visitor.id) break; } } localStorage["allVisitors"] = JSON.stringify(allVisitors); |
号
};
它会更新"dateout",但对于localstorage中的同一项,console.log每次显示相同的ID…
1 2 3 | <i class="icon ion-person"> {{visit.fname}} {{visit.lname}} <i class="icon ion-log-out" ng-click="hideMe(visit)"> |
这段代码看起来像个bug。您正在将一个对象与它本身进行比较(始终为真):
1 | if (signout[i].id===signout[i].id) |
此函数需要知道要更新哪个访问者。无论您在何处调用此函数,都需要至少传入userid(如果不是完整的user对象),比如:
1 2 3 4 5 6 7 8 9 10 11 12 | $scope.visitorOut = function(userId){ var allVisitors = JSON.parse(localStorage["allVisitors"]); var visitor; for(var i=0; i<allVisitors.length; i++){ visitor = allVisitors[i]; if (visitor.id === userId) { visitor.dateout = Date.now(); break; } } localStorage["allVisitors"] = JSON.stringify(signout); }; |
号
注意,我在这里使用了
1 | var myDate = new Date(visitor.dateOut); |
但是,如果您想将字符串化的日期转换回日期对象…它变得复杂(点击)。
我还稍微改变了变量名。camelcase是一种有用的命名约定,它有助于提高可读性,从读取代码的其余部分来看,