2017-12-27 509 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... 
}