2017-12-27 994 views
2

我的控制器中有一个名为myList的对象数组。将函数赋值给使用“this”引用自身的数组对象

我想要一个干净的方式来检查对象数组是否已经有一个特定的id对象。

对象的结构是这样的:在我的代码在控制器

function onInit() { 
    $log.debug(ctrl); 
    ctrl.myList.includes = function(id) { 
     var found = false; 
     for (var index=0; index < this.length; index++) { 
      if (this[index].id === id) { 
       found = true; 
       break; 
      } 
     } 
     return found; 
    } 
} 

现在,后来在别处:

myList: [ 
    { 
     id: <integer>, 
     . 
     . 
     . 
    }, 
    ... 
] 

假设var ctrl = this;,在我的控制之内我的OnInit功能

if (!ctrl.myList.includes(id) { 
    // Do something... 
} 

这是正确的方式使用thisincludes函数中的关键字已分配给myList? 控制台不会引发任何错误 - 因此在语法上这是正确的,但它不起作用。 也许还有更好的做法。

谢谢。

+0

可以使用'Array.prototype'高阶函数,并将其在链功能性的方式写, '函数includesId(ID){返回!! ctrl.myList.find(项目=>项。 id === id); }' –

+0

较新的浏览器已经有一个['Array.prototype.includes()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)方法。 – Andreas

+0

@Andreas - 我有要求支持较旧的浏览器版本。 –

回答

2

有没有必要重新发明轮子。
使用​​

some()方法测试所述阵列中的至少一个元素是否经过所提供的功能来实现的测试。

if (!ctrl.myList.some(function(element) { return element.id === id; }) { 
    // Do something... 
}