返回一个js对象,其中删除了所有第二个对象的属性

时间:2013-09-13 10:45:55

标签: javascript

什么是有效的非破坏性 javascript(jquery ok,如果需要)返回对象A中不在对象B中的所有内容的方法,以及来自对象B的绝对无效的方法? e.g。

对象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*/}
}

在我的例子中,子属性的值可能不同。它正在被重要的标识符剥离。

2 个答案:

答案 0 :(得分:3)

只需一个简单的循环即可:

var returnObject = {};

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

http://jsfiddle.net/GWXR3/

如果您可以使用下划线库,那么omit方法可以很好地工作(以及键方法):

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

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

答案 1 :(得分: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;
}