嵌套的jQuery.grep

时间:2015-11-12 16:39:39

标签: jquery arrays

我们可以使用$ .grep过滤掉不需要的数组项,所以

data = $.grep(jsonstr, function(d) {
    return d.attr == "x";
})

将只返回带有attr == x

的数组对象

如果我想同样过滤掉位于对象下的数组,我可以用$ .grep做什么?所以

    data = $.grep(jsonstr2, function(d) {
        $.grep(d.GL2_ACCTS, function(gl2) {
            return (gl2.localamt > lBound && gl2.localamt < uBound);
        });
        return d.DOC_TYPE == doc;
    }); 

应该过滤位于数据中每个元素内的arrElement数组吗?

数据如下:

jsonstr =  
[{
  DOC_TYPE: "1A", 
  GL1_ACCOUNT: "Other|Mark Up(Other)", 
  GL2_ACCTS: [
    {name: "Expenses|Conferences(Expenses)", localamt: 123, count: 2},
    {name: "Expenses|Consultancy(Expenses)", localamt: 49, count: 1}
  ]
}]

我在改变lBound和uBound时调用它。它只会返回所有内容,不会发生过滤。

2 个答案:

答案 0 :(得分:1)

您需要将过滤后的数组存储回对象中。

data = $.grep(jsonstr2, function(d) {
    d.GL2_ACCTS = $.grep(d.GL2_ACCTS, function(gl2) {
        return (gl2.localamt > lBound && gl2.localamt < uBound);
    });
    return d.DOC_TYPE == doc;
});

请注意,即使在外部$.grep未返回的对象中,也会过滤掉帐户。如果您不想这样做,则需要先进行DOC_TYPE检查:

data = $.grep(jsonstr2, function(d) {
    if (d.DOC_TYPE == doc) {
        d.GL2_ACCTS = $.grep(d.GL2_ACCTS, function(gl2) {
            return (gl2.localamt > lBound && gl2.localamt < uBound);
        });
        return true;
    } else {
        return false;
    }
});

答案 1 :(得分:0)

  

您不应该看到数据,问题是否与之相关   它可以根据它们的属性来过滤数组   在数组中,即。我可以使用嵌套的$ .grep来过滤底层的   数组以及主数据数组?