使用AngularJS,我在我的应用程序中创建了一个addTodo函数。
我似乎无法实现一种方法来检查添加到数组中的对象的唯一性,并让其后跟其他操作。
到目前为止,我能够使其他操作正常工作,但不能初步检查唯一性。如何实现对唯一性操作的检查,然后执行其他操作?
addTodo函数我试图像这样创建流程(粗体表示未实现):
检查todo是否已经存在待办事项
1a上。 如果确实存在,请不要按,显示警告
检查待办事项是否为空白
2a上。如果是空白,请不要按,显示警告
如果是唯一而非空白,请按下待办事项,显示成功消息
当前的addTodo函数(没有unqiueness检查):
$scope.addTodo = function(){
$scope.isVisible = true;
if ($scope.todo) {
$scope.todos.push($scope.todo);
$scope.todo = '';
$scope.alert = $scope.alerts[1];
}else{
$scope.alert = $scope.alerts[0];
}
};
注1:$scope.alert
和$scope.alerts
用于显示某些错误消息;
$scope.alerts[0]
“请在您的任务中添加文字。”
$scope.alerts[1]
“添加了新任务!”
如果正在添加的任务已存在,我想显示的警报是
$scope.alerts[3]
“任务已在列表中。”
注2:$scope.isVisible
切换警报的可见性
答案 0 :(得分:21)
以这种方式使用Array.indexOf
:
$scope.addTodo = function(){
$scope.isVisible = true;
if ($scope.todo) {
if ($scope.todos.indexOf($scope.todo) == -1) {
$scope.todos.push($scope.todo);
$scope.todo = '';
$scope.alert = $scope.alerts[1];
}else{
// $scope.todo is already in the $scope.todos array, alert the user
$scope.alert = $scope.alerts[3];
}
}else{
$scope.alert = $scope.alerts[0];
}
};
答案 1 :(得分:1)
如果您使用underscore或lodash,则可以使用此简单代码来推送数组中的唯一项。
if (_.findWhere($scope.todos, $scope.todo) == null) {
$scope.todos.push($scope.todo);
}
希望这有帮助!!!
答案 2 :(得分:0)