Javascript 将函数赋值给数组对象,该数组对象使用";这";

Javascript 将函数赋值给数组对象,该数组对象使用";这";,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我的控制器中有一个名为myList的对象数组 我想要一个干净的方法来检查对象数组是否已经有一个具有特定id的对象 对象结构如下所示: myList: [ { id: <integer>, . . . }, ... ] 现在,稍后在我的代码中,在控制器的其他位置: function onInit() { $log.debug(ctrl); ctrl.myList.includes

我的控制器中有一个名为
myList
的对象数组

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

对象结构如下所示:

myList: [
    {
        id: <integer>,
        .
        .
        .
    },
    ...
]
现在,稍后在我的代码中,在控制器的其他位置:

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;
    }
}
if (!ctrl.myList.includes(id) {
    // Do something...
}
在我分配给
myList
includes
函数中,使用
this
关键字是否正确? 控制台没有抛出任何错误-因此从语法上来说这是正确的,但它不工作。 也许有更好的办法来做这件事


谢谢。

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

some()
方法测试数组中是否至少有一个元素通过了所提供函数实现的测试


您可以使用
Array.prototype
高阶函数并以链式函数的方式编写它,
函数includeId(id){return!!ctrl.myList.find(item=>item.id==id);}
较新的浏览器已经有了一个方法。@Andreas-我需要支持较旧的浏览器版本。多旧<代码>数组.prototype.some()也受IE9@Andreas由于
Array.prototype.includes
仅查找具有基元值的平面数组,因此不能在此处使用它。简单的
数组.prototype.find有什么问题?
if (!ctrl.myList.some(function(element) { return element.id === id; }) {
    // Do something...
}