【发布时间】:2016-06-18 14:17:24
【问题描述】:
我正在使用 angular.js 1.5,并在前端使用 angular material 来从数据库中加载带有对象的 DOM。
在其中一个转发器中,我需要检查一个对象是否已经包含在另一个范围内的 javascript 数组中。我尝试使用Array.indexOf() 和Array.forEach 来实现它,并使用标准循环遍历每个元素,但它并没有按照我需要的方式发生。我一定是在做一些愚蠢的事情,这会阻止逻辑正常运行,理想情况下,如果当前对象存在于数组中,则方法应返回 false,否则返回 true。
用例是用户需要将项目ObjA从另一个列表(Objs)添加到一个列表(ObjX.Objs)
我的前端html代码:
//here there's an object that contains an array of objects
<div ng-controller="myFirstController" ng-init="findOne()">
<md-list-item ng-repeat="ObjA in ObjX.Objs" >
</md-list-item>
<div ng-controller="mySecondcontroller" ng-init="find()">
<md-list-item ng-repeat="ObjA in Objs" ng-if="ObjAExists(ObjA, ObjX.Objs)">
</md-list-item>
</div>
</div>
控制器方法:
$scope.ObjAExists = function(ObjA, list){
for(var m = 0; m<list.length; m++){
if(list[m] === ObjA){
return false;
}
else return true;
}
}
我也试过匹配对象ID没有区别
$scope.ObjAExists = function(ObjA, list){
for(var m = 0; m<list.length; m++){
if(list[m]._id == ObjA._id){
return false;
}
else return true;
}
}
Filter skills plunk 我写了一个代表同样问题的 plunk
【问题讨论】:
-
最好使用过滤器。还需要知道两个数组中是否有相同的对象引用。
标签: javascript arrays angularjs angular-material