如何在AngularJS中查找2D数组中的访问元素

时间:2016-03-09 16:23:33

标签: javascript angularjs mongoose mean-stack

我正在研究MEAN Stack Web应用程序。我试图在我的一个模型中使用2D数组。这是特定字段的架构:

alerts:  [{ name: String, time: Number}]

现在我正在尝试在我的UI应用程序中访问它。这是我访问和保存数据的方法。

             if ($scope.task.NewUserAssigned){
                    if($scope.task.alerts.indexOf({name: "NewUserAssigned"}) == -1)
                        $scope.task.alerts.push({name: "NewUserAssigned", time: $scope.task.NewUserAssignedtime});
                        console.log("Checked:  NewUserAssigned");
               }}

但我在遵循语法

时做错了什么
 if($scope.task.alerts.indexOf({name: "NewUserAssigned"}) == -1)

这就是为什么,我无法搜索具体的索引。此代码将我的数据保存在数据库中。 现在如何访问数组中的元素?

3 个答案:

答案 0 :(得分:2)

这是一个常见的JS问题。

Array.indexOf不像查询一样工作。您必须查找特定值。更重要的是,对象很棘手。如果对象真的相同(相同的引用),则带对象的indexOf将起作用。

所以你可以使用类似的东西:

var index = $scope.task.alerts.map(function(alert){
  return alert.name;
}).indexOf('NewUserAssigned');

if(index === -1){
 ....
}

或只是循环:

var index = -1;

for(var i = 0, alertsLen = $scope.task.alerts; i < alertsLen; i++){
  var alter = $scope.task.alerts[i];

  if(alert.name === 'NewUserAssigned'){
    index = i;
    break;
  }
} 

if(index === -1){
  ....
}

答案 1 :(得分:0)

不幸的是 - indexOf不适用于对象数组(这就是你拥有的,不是 2d数组) - 你必须循环并找到对象:< / p>

for (var i = 0; i < $scope.task.alerts.length; i++) {
    if ($scope.task.alerts[i].name == "NewUserAssigned") {
        //Found object at index: i, do something
    }
}

答案 2 :(得分:0)

indexOf 按引用函数搜索对象,这就是您的代码无法正常工作的原因。

对于搜索具有给定谓词的数组,下划线find函数很有用。