【问题标题】:Check For Uniqueness in Array, Push To Array if Unique检查数组中的唯一性,如果唯一则推送到数组
【发布时间】:2013-08-20 07:52:26
【问题描述】:

使用 AngularJS,我正在我的应用程序中创建一个 addTodo 函数。

我似乎无法实现一种方法来检查添加到数组中的对象的唯一性,并使其后跟其他操作。

到目前为止,我能够使其他操作正常工作,但不能对唯一性进行初始检查。如何实施检查唯一性操作,然后执行其他操作?

我正在尝试创建这样的流程的 addTodo 函数(粗体表示未实现):

  1. 检查待办事项是否已经在待办事项中

    1a。 如果确实存在,请不要推送,显示警报

  2. 检查 todo 是否为空

    2a。如果为空,请勿推送,显示提醒

  3. 如果唯一且不为空,则推送到待办事项,显示成功消息

当前的 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 切换警报的可见性

【问题讨论】:

  • 那么todo是一个简单的字符串还是一个对象?
  • 这是一个简单的字符串,是的
  • 希望你已经检查了我的答案。
  • 我有,谢谢!为其添加评论。

标签: javascript arrays angularjs push


【解决方案1】:

这样使用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];
  }
};

【讨论】:

  • 太棒了,谢谢!解决了我不确定在流程中的哪个位置执行操作以及如何根据我已有的内容正确执行它的主要问题。
  • 其他注意事项: mef的流程与我上面建立的流程不同,但实际上是正确的看待它的方式:首先,检查todo是否为空白。如果不是,那么检查它是否是唯一的。我在下面的代码中的陷阱是我太执着于我需要先检查待办事项是否唯一,然后再检查它是否为空白的想法。
【解决方案2】:

如果您使用underscorelodash,您可以使用这个简单的代码来推送数组中的唯一项。

if (_.findWhere($scope.todos, $scope.todo) == null) {
    $scope.todos.push($scope.todo);
}

希望对你有帮助!!!

【讨论】:

    【解决方案3】:

    如果您使用标准字符串todo,您可以使用javascript 数组indexOf 方法。此对象数据类型的方法进行引用匹配。

    另外你也可以看看jquerygrep方法。

    使用其中一种方法检查$scope.todos 是否已包含此类元素并显示警报。

    【讨论】:

    • 基于此,我已经编辑了这样的代码,但它仍然允许将重复项推送到数组中; $scope.addTodo = function(){ $scope.isVisible = true; var todos = $scope.todos; var todo = $scope.todo; if (todo == todos.indexOf(todo)){ $scope.alert = $scope.alerts[3]; } else if ($scope.todo) { $scope.todos.push($scope.todo); $scope.todo = ''; $scope.alert = $scope.alerts[1]; } else { $scope.alert = $scope.alerts[0]; } };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2021-05-30
    • 2020-12-15
    相关资源
    最近更新 更多