有没有办法使用 knockout.js 或 jquery 返回过滤后的新对象列表。我想返回具有 IsSelected 的项目列表并从中创建一个新对象,否则我不想返回它。
return ko.utils.arrayForEach(result.items, function (item) {
if (item.IsSelected)
return {};
return false;
});
有没有办法使用 knockout.js 或 jquery 返回过滤后的新对象列表。我想返回具有 IsSelected 的项目列表并从中创建一个新对象,否则我不想返回它。
return ko.utils.arrayForEach(result.items, function (item) {
if (item.IsSelected)
return {};
return false;
});
您可以使用 JQuery 的filter()
功能:
return $(result.items).filter(function() {
return this.IsSelected;
});
见http://api.jquery.com/filter/
更好的是,您可以使用grep()
(参见http://api.jquery.com/jQuery.grep/):
var arr = $.grep(result.items, function(item) {
return item.IsSelected;
});
return arr.length > 0 ? arr : false;
你的两个答案都有帮助。我在下面做了这个。
result.selected = ko.computed(function () {
return ko.utils.arrayMap(getSelectedItems(result.items()), function (item) {
return { Id: item.Id };
});
}, result);
function getSelectedItems(items) {
return ko.utils.arrayFilter(items, function (item) {
return item.IsSelected();
});
}
jQuery.grep 将迭代一个数组并根据您的条件返回一个数组。然后你需要迭代这个数组并 clone() 对象以获得你想要的结果。
http://api.jquery.com/jQuery.grep/
var arr = [{foo:1, bar: 2}, {foo: 2 , bar: 3}, {foo: 10, bar: 2}];
var x = jQuery.grep(arr, function (item, i) {
return item.foo < 5;
});
//x = [{foo:1, bar:2}, {foo: 2, bar: 3}]
var y = [];
// here is the create a new object part
// clone your objects (you could use jQuery.clone() if they are elements).
x.each(function (item) {
y.push(jQuery.extend({}, $(this)));
});