1

出力として取得するためにbigObjectで定義されたプロパティのみでフィルタリングする便利な方法はありますか?filterInterfacefilteredObject

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

ここでjsfiddleとして次のコードを用意しました。

// 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"
    }                
};
4

1 に答える 1

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
于 2012-04-25T07:33:30.590 に答える