如何在 AngularJS 中的二维数组中查找访问元素
How to find access element in 2D array in AngularJS
我正在开发 MEAN Stack 网络应用程序。我正在尝试在我的一个模型中使用二维数组。这是特定字段的架构:
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)
这就是为什么我无法搜索特定索引的原因。此代码将我的数据保存在数据库中。
现在如何访问数组中的元素?
不幸的是 - indexOf
不适用于对象数组(这是你所拥有的, 不是 二维数组) - 你必须循环并找到对象:
for (var i = 0; i < $scope.task.alerts.length; i++) {
if ($scope.task.alerts[i].name == "NewUserAssigned") {
//Found object at index: i, do something
}
}
这是一个常见的 JS 问题。
Array.indexOf 不像查询那样工作。您必须查找特定值。更重要的是,对象很棘手。 indexOf with object 只有在对象真的相同(相同的引用)时才有效。
所以你可以使用类似的东西:
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){
....
}
indexOf 函数通过引用搜索对象,这就是您的代码无法按预期工作的原因。
对于给定谓词搜索数组,underscorejs find 函数很有用。
我正在开发 MEAN Stack 网络应用程序。我正在尝试在我的一个模型中使用二维数组。这是特定字段的架构:
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)
这就是为什么我无法搜索特定索引的原因。此代码将我的数据保存在数据库中。 现在如何访问数组中的元素?
不幸的是 - indexOf
不适用于对象数组(这是你所拥有的, 不是 二维数组) - 你必须循环并找到对象:
for (var i = 0; i < $scope.task.alerts.length; i++) {
if ($scope.task.alerts[i].name == "NewUserAssigned") {
//Found object at index: i, do something
}
}
这是一个常见的 JS 问题。
Array.indexOf 不像查询那样工作。您必须查找特定值。更重要的是,对象很棘手。 indexOf with object 只有在对象真的相同(相同的引用)时才有效。
所以你可以使用类似的东西:
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){
....
}
indexOf 函数通过引用搜索对象,这就是您的代码无法按预期工作的原因。
对于给定谓词搜索数组,underscorejs find 函数很有用。