2013-10-31 5 views
0
cityArray.indexOf(data.results[index].City) === -1 

각 항목이 객체 인 knockoutObservable 배열에 대해 indexOf 메서드를 사용하려면 어떻게해야합니까? cityArray는 City라는 속성이있는 객체를 포함합니다.녹아웃 관찰 가능한 배열 IndexOf 메서드

+1

일을 내 arrayIndexOf을 가지고하는 방법입니다. ['ko.utils.arrayFirst'] (http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html), 다른 수의 기존 유틸리티 함수를 사용하거나 자신의 롤을 사용할 수 있습니다 고리. 'var arr = observableArray()'일단 정상적인 배열을 남겨두면 다른 JavaScript 배열처럼 취급 할 수 있습니다. – user2864740

+0

@ user2864740 : 이것은 대답 일 것입니다 – naveen

답변

0
cityArray.indexOf( 
    ko.utils.arrayFirst(ko.utils.unwrapObservable(cityArray), function(cityObj) { 
     return ko.utils.unwrapObservable(cityObj.City) == 'WallaWalla'; 
    } 
) 

ko.utils.unwrapObservable 기능 것이다() 개체 그것을 필요로하고 의지가 수행되지 않은 경우하지 않을 경우. Lightweight ... V2.3에서는 js에 너무 많은 글자가 두려워 할 때를 대비해 ko.unwrap을 사용할 수 있습니다.

arrayFirst가 객체를 반환하면 indexOf가 객체의 비교를 가져오고 index가 있어야합니다 .- 존재하지 않으면 색인을 얻습니다. ... arrayFirst와 일치하는 것이 없으면 null를 얻는다.

+1

BTW, 바로 가기로'ko.unwrap'가 실제로 2.3.0에 추가되었습니다 – ebohlman

+0

올바른 ... 위의 편집 ... 그 중 하나를 가리키는 주셔서 감사합니다 ... 가끔씩 이동하는 손가락 두뇌보다 – beauXjames

1

답장을 보내 주셔서 감사합니다. 내가 indexOf 메서드를 사용하여 관찰 가능한 배열에 항목이 이미 있는지 확인하려고했습니다. 대신 나는 이제 ko.utils.arrayGetDistinctValues를 사용하므로 더 이상 indexOf 메서드를 사용할 필요가 없습니다. 그러나 arrayGetDistinctValues가 객체 배열에서 작동하지 않기 때문에 먼저 값을 일반 배열에 복사 한 다음이 배열에서 함수를 사용했습니다.

0

이 내가 당신은 할 수 없습니다

var viewModel = function() { 
 
    var self = this; 
 

 
    self.suggestions = ko.observableArray([]); 
 
    self.filterText = ko.observable(''); 
 

 
    self.filterText.subscribe(function(newValue) {}); 
 

 
    self.suggestionsFilter = ko.computed(function() { 
 
    
 
    if (self.filterText() === '') { 
 
     return self.suggestions(); 
 
    } else { 
 
     return ko.utils.arrayFilter(self.suggestions(), function(item) { 
 

 
     var filterResults = item.option.toLowerCase().indexOf(self.filterText().toLowerCase()) == 0; 
 
     return filterResults; 
 

 
     }); 
 
    } 
 
    }); 
 
};
<div class="col-md-6 postcode-search" id="js-postcode-search-suggestions"> 
 
    <input id="name-search" class="form-control" type="search" name="postcode" minlength="1" placeholder="Postcode or Address" data-bind="textInput: filterText" /> 
 
    <div class="col-md-12" data-bind="visible: suggestions().length > 1" style="display: none"> 
 
    <ul class="suggestions" data-bind="foreach: suggestionsFilter"> 
 
     <li class="pad-top-bottom"> 
 
     <a href="#"> 
 
      <span class="option" data-bind="html: option"></span> 
 
     </a> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</div>

관련 문제