检查数组中的唯一性,如果唯一则推送至数组
Check For Uniqueness in Array, Push To Array if Unique
使用AngularJS,我正在我的应用程序中创建一个addTodo函数。
我似乎很难实现一种方法来检查添加到数组中的对象的唯一性,并在执行其他操作时遇到问题。
到目前为止,我能够让额外的操作发挥作用,但不能对唯一性进行初步检查。如何实现唯一性检查操作,然后再执行其他操作?
我试图创建的addTodo函数如下(Bold表示未实现):
-
检查todo是否已在todos中
1a如果它确实存在,不要推,显示警报
-
检查todo是否不是空白
2a。如果它是空白的,不要推,显示警报
-
如果唯一且非空白,则推送至todos,显示成功消息
当前addTodo函数(无不合格检查):
$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
切换警报的可见性
以这种方式使用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];
}
};
如果您使用下划线或lodash,您可以使用这个简单的代码来推送数组中的唯一项。
if (_.findWhere($scope.todos, $scope.todo) == null) {
$scope.todos.push($scope.todo);
}
希望这能有所帮助!!!
如果使用标准字符串todo
,则可以使用javascript数组indexOf方法。对象数据类型的此方法进行引用匹配。
否则,您还可以查看jquery-grep方法。
使用以下方法之一检查$scope.todos
是否已包含此类元素并显示警报。
相关文章:
- 如何从数组中查找唯一对象
- JavaScript:从对象数组中获取唯一值及其计数
- 创建具有2个唯一数字的Javascript数组
- javascript和具有唯一密钥的es6过滤器数组
- 根据对多个数组唯一的元素创建一个新数组
- 将数组中的重复项转换为唯一项,而不删除Javascript中的任何项
- 映射对象数组,并且仅采用唯一
- Ember JS如何获取具有唯一属性值的数组
- 如何使 JSON 数组唯一
- Javascript:编写一个函数,接收一个数组,然后返回一个只有唯一数字的数组,只删除数组
- 从数组列表中返回唯一的数组
- 推送时请确保数组中的值是唯一的
- 对具有唯一值的对象键的数组进行排序
- 如何从字符串数组中获得8个随机唯一元素
- 基于单个属性从数组中获取唯一对象
- javascript唯一值数组中的唯一随机值
- 将唯一对象推送到JavaScript数组
- 从数组中获取最高但也是唯一的数字
- 从字符串数组创建唯一组合数组
- ReactJS中使用非子组件的子数组唯一键