cityArray.indexOf(data.results[index].City) === -1
如何在每个项目都是对象的knockoutObservable数组中使用indexOf方法? cityArray包含具有名为City的属性的对象。
答案 0 :(得分:1)
谢谢大家的答案。我试图使用indexOf方法来查看一个条目是否已存在于一个可观察数组中。相反,我现在使用ko.utils.arrayGetDistinctValues,所以我不再需要使用indexOf方法。但由于arrayGetDistinctValues对对象数组不起作用,我首先将值复制到普通数组中,然后在其上使用该函数。
答案 1 :(得分: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将拉取对象的比较,你应该得到你的索引......-如果它不存在...如果没有与arrayFirst的匹配,你将得到空。
答案 2 :(得分: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>