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

this을 사용하는 적절한 방법입니다. myList에 할당 된 includes 함수의 키워드는 무엇입니까? 콘솔에 오류가 발생하지 않습니다. 구문 적으로는 올바르지 만 작동하지 않습니다. 아마도 이렇게하는 것이 좋습니다.

감사합니다.

+0

, '기능 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

바퀴를 재발 명할 필요가 없습니다.
사용 Array.prototype.some()

배열되는 적어도 하나 개의 원소 제공된 기능에 의해 구현되는 테스트를 통과 여부 some() 시험 방법. 사용자가 사용하는`고차 함수 Array.prototype` 및 연쇄 작용 방식을 쓸 수

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