0

jqueryのgrep関数に、反映された新しい配列を持つ新しいオブジェクトを返すように強制する方法はありますか? たとえば、以下のような JSON と JavaScript のサンプルがあります。

var myObject = {     "Apps" : [    
    {
        "Name" : "app1",
        "id" : "1",
        "groups" : [
            { "id" : "1", 
              "name" : "test group 1", 
              "desc" : "this is a test group"
             },
            { "id" : "2",
              "name" : "test group 2",
              "desc" : "this is another test group"
             },
              { "id" : "2",
              "name" : "test group 2",
              "desc" : "this is another test group"
             }
        ]              
    }
    ]
   }

 var b,a;
    $.each(myObject.Apps, function() {    
     b = $.grep(this.groups, function(el, i) {
    return el.id.toLowerCase() === "2"                
    });         

   }); 

 alert(JSON.stringify(b));  

したがって、これを実行すると、予想どおりアラートに次のテキストが表示されます。

[{"id":"2","name":"test group 2","desc":"this is another test group"},{"id":"2","name":"test group 2","desc":"this is another test group"}]

しかし、このような新しい戻り配列を持つ JavaScript オブジェクト全体が必要です。予想される O/p::

 "Apps" : [    
    {
        "Name" : "app1",
        "id" : "1",
        "groups" : [
             { "id" : "2",
              "name" : "test group 2",
              "desc" : "this is another test group"
             },
              { "id" : "2",
              "name" : "test group 2",
              "desc" : "this is another test group"
             }
        ]              
    }
    ]

どんなアイデアでも大いに役立ちます。

4

1 に答える 1

4

正しく理解していれば、$。grepで返されないグループをマスターオブジェクトから削除する必要があります。

メソッドを使用して、ループの後$.grep()に1行追加します$.each$.grep

デモ:http://jsfiddle.net/67Bbg/

var b,a;
$.each(myObject.Apps, function() {    
   b = $.grep(this.groups, function(el, i) {
      return el.id.toLowerCase() === "2"                
   });

  /* replace group with new array from grep */         
   this.groups=b;
 });

編集:省略版

$.each(myObject.Apps, function() {    
    this.groups= $.grep(this.groups, function(el, i) {
      return el.id.toLowerCase() === "2"                
   });
 });
于 2012-06-19T21:52:47.757 に答える