使用computed observable陣列的completeArray
和pickedArray
之間的差異。
的Javascript
var ViewModel = function() {
var self = this;
self.completeArray = ko.observableArray([{id: 1, name: "john"}, {id: 2, name: "bill"}, {id: 3, name: "tom"}]);
self.pickedArray = ko.observableArray([{id: 1, name: "john"}, {id: 3, name: "tom"}]);
self.diffArray = ko.computed(function() {
return ko.utils.arrayFilter(self.completeArray(), function(completeItem) {
var sameItem = false;
ko.utils.arrayForEach(self.pickedArray(), function(pickedItem) {
if(pickedItem.id == completeItem.id && pickedItem.name == completeItem.name) {
sameItem = true;
return; // break out of this loop
}
});
return !sameItem;
});
}, self);
};
$(function() {
var vm = new ViewModel();
ko.applyBindings(vm);
});
HTML
<h1>Complete Array</h1>
<div data-bind="foreach: completeArray()">
<span data-bind="text: $data.name"></span>
</div>
<h1>Picked Array</h1>
<div data-bind="foreach: pickedArray()">
<span data-bind="text: $data.name"></span>
</div>
<h1>Diff Array</h1>
<div data-bind="foreach: diffArray()">
<span data-bind="text: $data.name"></span>
</div>
輸出
一系列完整
約翰·湯姆法案
採摘陣列
約翰·湯姆
DIFF陣列
法案
例
http://jsfiddle.net/jdtjmy6u/3/
甜!這是近乎完美的,但與我的數組不兼容,因爲我的observableArray在每個對象{id,name},{id,name}上有兩個值,我需要修改哪些內容才能比較我的observableArray對象的ID值? –
你認爲有一種方法可以用observableArray對象來完成這項工作嗎? –
這是你在找什麼? http://jsfiddle.net/jdtjmy6u/3/(更新) – kspearrin