在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
Run Code Online (Sandbox Code Playgroud)
我怎样才能检查是否是这种情况?
我有两个大的,嵌套的javascript对象,我想比较它们并创建一个只代表差异的对象.我打算用它来创建一个PATCH请求.
给定oldObj和newObj:
newObj应该在diff中oldObj应该在diff中newObj如果值是数组,字符串或数字,则两个对象上的属性应使用值这可能看起来像重复,但我认为不是.此解决方案(1)仅为一级深度(下面的答案是非递归的,在阵列上爆炸,并且不是双向的).这个解决方案(2)返回不变的属性不是双向的.
目标输入/输出:
diff({a:1},{a:0}); // {a:0}
diff({a:1},{b:1}); // {a:1,b:1}
diff({
a: { x: 1 },
b: 1
},
{
a: { x: 0 },
b: 1
}) // {a:{x:0}}
diff({a:[1,3,5,7]},{a:[1,3,7]}); // {a:[1,3,7]}
Run Code Online (Sandbox Code Playgroud)
我正在使用从解决方案1修改的以下方法.它符合所有条件,diff({a:1},{b:1}) // {a:1,b:1}因为它只在一个方向上进行比较.
jsonDiff = function(oldObject, newObject) {
var diff, i, innerDiff;
diff = {};
for (i in newObject) {
innerDiff = {};
if (_.isArray(newObject[i])) {
if …Run Code Online (Sandbox Code Playgroud)