【问题标题】:How to get difference of two JS objects如何获得两个JS对象的差异
【发布时间】:2015-01-30 11:27:05
【问题描述】:

JavaScript 新手,对 JS 对象的了解非常有限。我想得到两个 JS 对象的区别。

a=[{"month":1,"year":2015},{"month":2,"year":2015},{"month":3,"year":2015},{"month":4,"year":2015},{"month":5,"year":2015}];
b=[{"month":1,"year":2015},{"month":2,"year":2015},{"month":5,"year":2015}];

我梦寐以求的结果应该是

result=[{"month":3,"year":2015},{"month":4,"year":2015}];

我使用JSON.stringify得到了上述格式。

【问题讨论】:

  • 如果ba 没有的东西怎么办!!不同的是,您是否也考虑过这种情况!
  • @demo 我在 SO 上尝试了几种可用的解决方案。没有人真正为我工作,或者对于一个简单的问题来说太复杂了。否则我会意识到时间的价值。
  • @AshadShanto 在这种特殊情况下可能不会发生。我已经在跟踪这件事了。

标签: javascript arrays json


【解决方案1】:

下面应该适合你,只需在数组上使用filter

var a=[{"month":1,"year":2015},{"month":2,"year":2015},{"month":3,"year":2015},{"month":4,"year":2015},{"month":5,"year":2015}];
var b=[{"month":1,"year":2015},{"month":2,"year":2015},{"month":5,"year":2015}];

var diff = a.filter(function(a){
    return b.filter(function(b){
        return b.month == a.month && b.year == a.year
    }).length == 0
});

console.log(diff);

【讨论】:

  • 在我的代码中我得到undefined is not a function 我怎样才能把它变成一个常规的函数形式?这样我就可以在实际填充数据的数组上方声明它。
  • @LetMeCode你看不懂,能不能详细点?或向我们展示您的代码?
  • 我们开始吧,fiddle 这只是为了展示我使用你的函数的代码结构。请建议我如何克服这个uncaught type error:undefined is not a function
  • 问题是,您正在尝试在过滤方法上使用 JSON,过滤方法仅适用于 Object,我已经在小提琴中更新了您的代码,请检查并告诉我
  • 其实我根本不需要JSON.stringify。我删除了它,错误消失了。但结果看起来像这样differenceOfMonthYearData: monthYearDataToBeMarked: , monthYearDataToBeFiltered: ,,, 空数组。逗号表示有一些数据。但它没有显示。
猜你喜欢
  • 2016-01-18
  • 2016-07-12
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
相关资源
最近更新 更多