Javascript 检查数组中的唯一性,如果唯一,则推送到数组
使用AngularJS,我在我的应用程序中创建了一个addTodo函数 我似乎很难实现一种方法来检查被添加到数组中的对象的唯一性,然后再执行其他操作 到目前为止,我能够让其他操作正常工作,但无法对唯一性进行初始检查。我如何实现检查唯一性操作,然后再执行其他操作 我试图创建的addTodo函数如下(Bold表示未实现):Javascript 检查数组中的唯一性,如果唯一,则推送到数组,javascript,arrays,angularjs,push,Javascript,Arrays,Angularjs,Push,使用AngularJS,我在我的应用程序中创建了一个addTodo函数 我似乎很难实现一种方法来检查被添加到数组中的对象的唯一性,然后再执行其他操作 到目前为止,我能够让其他操作正常工作,但无法对唯一性进行初始检查。我如何实现检查唯一性操作,然后再执行其他操作 我试图创建的addTodo函数如下(Bold表示未实现): 检查todo是否已在todo中 1a如果确实存在,则不推,显示警报 检查todo是否为空 2a。如果为空,则不按,显示警报 如果唯一且不为空,则按至待办事项,显示成功消息 当前
$scope.alert
和$scope.alerts
用于显示某些错误消息
“请向任务中添加文本。”
“添加了新任务!”
如果要添加的任务已存在,则要显示的警报为
$scope.alerts[3]
“任务已在列表中。”
注2:
$scope.isVisible
切换警报的可见性如果您使用的是标准字符串todo
,则可以使用javascript数组方法。对象数据类型的此方法不进行引用匹配
另外,您还可以查看jquery方法
使用以下方法之一检查$scope.todos
是否已包含此类元素并显示警报。使用以下方法:
$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];
}
};
如果您使用的是或,则可以使用此简单代码在数组中推送唯一的项
if (_.findWhere($scope.todos, $scope.todo) == null) {
$scope.todos.push($scope.todo);
}
希望这有帮助 所以
todo
是一个简单的字符串还是一个对象?它是一个简单的字符串,是的,你已经检查了我的答案。我已经检查了,谢谢!在此基础上,我对代码进行了如下编辑,但仍然允许将重复项推送到数组中<代码>$scope.addTodo=function(){$scope.isVisible=true;var todo=$scope.todo;var todo=$scope.todo;if(todo==todo.indexOf(todo)){$scope.alert=$scope.alerts[3];}else if($scope.todo){$scope.todo.push($scope.todo);$scope.todo=';$scope.alert=$scope.alerts[1];}els{$scope.alert=$scope.alerts[0];}代码>太棒了,谢谢!解决了我的主要问题,即不确定在流程中的何处执行操作,以及如何根据我已经拥有的内容正确执行操作。其他人注意:mef的流程与我上面建立的流程不同,但实际上是正确的查看方式:首先,检查todo是否为空。如果不是,则检查它是否唯一。我在下面代码中的陷阱是,我太执着于这样一个想法,即我需要先检查todo是否唯一,然后再检查它是否为空。
$scope.alerts[3]
$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];
}
};
if (_.findWhere($scope.todos, $scope.todo) == null) {
$scope.todos.push($scope.todo);
}