循环2 foreach

时间:2014-05-13 05:48:52

标签: angularjs

假设我有两个对象: obj obj2

obj = [
   {"id": 0,"name": "foo","is_editable":true},
   {"id": 1,"name": "bar","is_editable":true},
   {"id": 2,"name": "app","is_editable":true}
]

obj2 = [
   {"id": 0},
   {"id": 2}
]

我需要设置属性 is_editable = false 如果obj的id在obj2中

我在这里有我的代码,它工作正常,但我对我的逻辑感到不舒服。

angular.forEach(data, function(obj) {
    obj.is_checker = false;
    angular.forEach(data2, function(obj2) {
        if (obj2.id === obj.id)
            obj.is_checker = true;
    });
});

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

你将需要一些循环,但你可以使用普通的旧JS。

obj.map(function(item) { 
  obj2.map(function(item2) {
    if(item.id === item2.id) {
       item.is_editable = false;
    }
  })
})

如果您想使用角度来完成它,请使用几乎相同的逻辑。

angular.forEach(obj, function(item) {
    angular.forEach(obj2, function(item2) {
        if (item.id === item2.id)
            obj.is_editable = false;
    });
});

答案 1 :(得分:1)

我就是这样做的:

obj.map(function(o){ 
   o.is_editable = obj2.some(function(c){ return c.id === o.id }); 
   return o;  
});

我会使用some函数来查找该项目是否可编辑。