0
cityArray.indexOf(data.results[index].City) === -1

如何将 indexOf 方法用于每个项目都是对象的 knockoutObservable 数组?cityArray 包含具有名为 City 的属性的对象。

4

3 回答 3

1

谢谢大家的回答。我试图使用 indexOf 方法来查看一个条目是否已经存在于可观察数组中。相反,我现在使用 ko.utils.arrayGetDistinctValues 所以我不再需要使用 indexOf 方法。但由于 arrayGetDistinctValues 不适用于对象数组,我首先将值复制到普通数组中,然后在其上使用函数。

于 2013-11-01T14:25:31.360 回答
0

这就是我让我的 arrayIndexOf 工作的方式

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>

于 2015-02-19T09:41:55.107 回答
0
cityArray.indexOf(    
    ko.utils.arrayFirst(ko.utils.unwrapObservable(cityArray), function(cityObj) {
        return ko.utils.unwrapObservable(cityObj.City) == 'WallaWalla';
    }
)

ko.utils.unwrapObservable 函数将 () 你的对象,如果它需要它,如果它不需要它就不会。轻量级...在 V2.3 中,您可以只做 ko.unwrap 以防万一您担心 js 中的字母过多。

arrayFirst 返回对象,然后 indexOf 将拉取对象的比较,如果它不存在,您应该得到您的索引...-1...如果没有与 arrayFirst 匹配,您将获得 null。

于 2013-10-31T23:48:14.777 回答