1

オブジェクトBにないオブジェクトAのすべてを返すだけでなく、オブジェクトBから絶対に何も返さない効率的な非破壊的なjavascript(必要に応じてjquery OK)の方法は何ですか?例えば

オブジェクト A

objectA = {
    thing1 : {/*various sub-properties*/},
    thing2 : {/*various sub-properties*/},
    thing3 : {/*various sub-properties*/},
    thing4 : {/*various sub-properties*/}
}

オブジェクト B

objectB = {
    thing3 : {/*various sub-properties*/},
    thing4 : {/*various sub-properties*/},
    thing5 : {/*various sub-properties*/}
}

戻るべき

{
    thing1 = {/*various sub-properties*/},
    thing2 = {/*various sub-properties*/}
}

私の場合、サブプロパティの値は異なる場合があります。重要なのは識別子によるストリッピングです。

4

2 に答える 2

3

単純なループだけでそれができます:

var returnObject = {};

for (var prop in objectA) {
    if (objectA.hasOwnProperty(prop) && !objectB.hasOwnProperty(prop)) {
        returnObject[prop] = objectA[prop];
    }
}

http://jsfiddle.net/GWXR3/

アンダースコア ライブラリを使用できる場合は、うまく機能する omitメソッドがあります (keys メソッドと一緒に):

var returnObject = _.omit(objectA, _.keys(objectB));

http://jsfiddle.net/GWXR3/1/

于 2013-09-13T10:56:27.477 に答える
0

これはどう?

function check(a, b) {
  var out = {};
  for (var key in a) {
    if (a.hasOwnProperty(key)) {
      if (b[key]) { continue; }
      out[key] = a[key];
    }
  }
  return out;
}
于 2013-09-13T10:55:52.637 に答える