2016-09-14 169 views
0

比较关注我的角度对象与角度对象

$scope.obj1= [ 
    {"NewID":38,"Type":"Faculty","Year":"2016","Status":"Active"}, 
    {"NewID":39,"Type":"Staff","Year":"2016","Status":"Active"}, 
    {"NewID":40,"Type":"Faculty","Year":"2016","Status":"Active"}, 
    {"NewID":41,"Type":"Faculty","Year":"2016","Status":"Active"} 
] 

我要检查“类型”中包含任何“工作人员”或“学院”为我用下面的代码

 var myobj=$scope.obj1; 

     var x=false; y=false; 

      for (var i = 0; i < myobj.length; i++) { 
      if (myobj[i].Type == 'Faculty') {      
       x=true; 
       break; 
      } 

      } 
     for (var i = 0; i < myobj.length; i++) { 

      if (myobj[i].Type == 'Staff') { 
       y=true; 
       break;    
      } 
      } 

我使用的JavaScript因为我正在寻找简单的方法在角度或JavaScript而不是使用for循环

回答

5
var filteredObjects = $scope.obj1.filter(function(obj){ 
    return obj.Type === 'Faculty' || obj.Type === 'Staff'; 
}) 

这将返回一个数组与t他过滤了对象(Type'Faculty'和'Staff')。您可以检查length以查看是否有或需要执行任何其他操作。

编辑
既然你只想检查是否含有“学院”或“员工”你应该使用Array.prototype.some代替。

var exists = $scope.obj1.some(function (obj) { 
    return obj.Type === 'Faculty' || obj.Type === 'Staff'; 
} 

对于单独的结果,你可以只创建function

function checkExists (type) { 
    return $scope.obj1.some(function (obj) { 
     return obj.Type === type; 
    } 
} 
var facultyExist = checkExists('Faculty'); 
var staffExist = checkExists('Staff'); 
+2

您可以使用[Array.prototype.some](https://developer.mozilla)来过滤和检查长度,而不是过滤和检查长度.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some),它根据任何元素是否与谓词匹配来返回布尔值。 –

+0

你是对的@JoeClay。小姐读过这个问题,会编辑。 – taguenizy

+0

我不认为你误解了这个问题。这仍然是一个很好的答案 – Phil

3

过滤器会创建一个新的数组每一次,试试这个,如果你需要的是知道如果对象存在:

obj1= [ 
    {"NewID":38,"Type":"Faculty","Year":"2016","Status":"Active"}, 
    {"NewID":39,"Type":"Staff","Year":"2016","Status":"Active"}, 
    {"NewID":40,"Type":"Faculty","Year":"2016","Status":"Active"}, 
    {"NewID":41,"Type":"Faculty","Year":"2016","Status":"Active"} 
]; 

const includes = -1 !== obj1.findIndex(item => item.Type === "Faculty" || item.Type === "Staff"); 

// in case your browser doesnt support arrow functions: 
const includes2 = 
    -1 !== obj1.findIndex(
    function (item) { 
     return item.Type === "Faculty" || item.Type === "Staff"; 
     } 
    ); 
+0

为什么这个'=>'对我来说显示语法错误 – Pravin

+0

如果您的浏览器不支持箭头功能或者您不使用Babel –

0
obj1.forEach(function(val,index){ 
    if(val.type=='Faculty) 
    { 
    //your code 
    } 
    else if(val.type == 'Staff') 
    { 
    //your code 
})