Js数组长度增加得太早

时间:2014-11-23 07:12:40

标签: javascript arrays angularjs

我有一个基于条件的数组长度。我的问题是数组在正确的时间没有增加。 很难解释所以我做了一个plunker和示例代码:

当我第二次点击按下时,我希望警报为'gt 1'。 我怎么能解决这个问题?也许有柜台或什么?

<div ng-repeat="user in data">
     <a ng-click="pushUser(user)">push</a>
</div>

app.controller('MainCtrl', function($scope) {
  $scope.users = [];

  $scope.data = [{name: 1} ,{name: 2}, {name:3}];

  $scope.pushUser = function(user) {

    if($scope.users.length > 1) {
      alert('gt 1');
      $scope.users.push(user);
    } else {
      alert('lt 1');
      $scope.users.push(user);
    }  
  }
});

http://plnkr.co/edit/FsjV20MI0bcwKMqOUOoS?p=preview

2 个答案:

答案 0 :(得分:0)

由于数组users的初始长度为0,因此当您第一次单击时,条件if($scope.users.length > 1)将被评估为false。因此,else部分最终会在user数组中添加一个元素。

第二次,当您单击该链接时,条件if($scope.users.length > 1)仍会被评估为false,因为数组的长度等于1而不是>1。因此,else部分仍然会被执行,并且会导致user数组的长度增加到2。

后续点击将导致显示警告gt 1。因此,要获得所需的结果,您应该将条件更改为if($scope.users.length >= 1)。请注意,操作符已更改为指示数组长度是否大于或等于1,这在第二次单击链接时为true。

答案 1 :(得分:-1)

按,然后检查:

$scope.users.push(user);

if($scope.users.length => 1) {
  alert('gt 1');      
} else {
  alert('lt 1');
}