0

ノックアウト js または jquery を使用して、フィルター処理された新しいオブジェクトのリストを返す方法はありますか。IsSelected を持つアイテムのリストを返し、そこから新しいオブジェクトを作成したいのですが、それ以外の場合は返したくありません。

return ko.utils.arrayForEach(result.items, function (item) {
    if (item.IsSelected)
        return {};
    return false;
});
4

3 に答える 3

4

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;
于 2012-04-20T19:45:34.527 に答える
4

あなたの両方の答えが役に立ちました。私はこれを以下にしました。

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();
        });
    }
于 2012-04-20T20:47:33.663 に答える
1

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)));
});
于 2012-04-20T19:50:26.623 に答える