2012-04-25 8 views
1

bigObjectfilterInterfaceで定義されたプロパティのみでフィルタリングしてfilteredObjectを出力する便利な方法はありますか?フィルタオブジェクトに基づいてオブジェクトをフィルタリングする方法

大きなオブジェクトには多くのプロパティがあり、必要なプロパティ(情報をどこかに保存する、完全なオブジェクトを保存したくない、または保存できない)に必要な情報を削除したい。

I prepared the following code as a jsfiddle here.

// My big object 
var bigObject = { 
    prop1: { 
     prop2: { 
      prop3: 123, 
      prop4: 456, 
      prop5: "TEST"    
     }, 
     prop6: 789, 
     prop7: "xxx" 
    }, 
    prop8: 5.6, 
    prop9: 3  
}; 

// My "interface" to filter the object 
var filterInterface = { 
    prop1: { 
     prop2: { 
      prop3: true, 
     }, 
     prop7: true 
    }     
}; 

// My expected result, only the properties of 
// big Object which match the interface 
var filteredObject = { 
    prop1: { 
     prop2: { 
      prop3: 123, 
     }, 
     prop7: "xxx" 
    }     
}; 

答えて

1

簡単に言えば、私のようなものを期待したい:

var filteredObject = {} 

for (var key in filterObject) { 
    if (bigObject.hasOwnProperty(key)) { 
    filteredObject[key] = bigObject[key]; 
    } 
} 

あなたが "深い" フィルタリングしたい場合は再帰を含める:

function filter(obj, filterObj) { 
    var newObj = {}; 

    for (var key in filterObj) { 

    if (obj.hasOwnProperty(key)) { 

     if (typeof obj[key] == 'object' && typeof filterObj[key] == 'object') { 
     newObj[key] = filter(obj[key], filterObj[key]); 

     } else { 
     newObj[key] = obj[key]; 
     } 
    } 
    } 
    return newObj; 
} 


var o = filter(bigObject, filterInterface); 

alert(o.prop1.prop7); // 'xxx' 
alert(o.prop1.prop9); // undefined 
+0

パーフェクトを、それのthats。ありがとう! – Marc

関連する問題