我有一个远程JSON文件,其中包含登录服务的最后100个用户的列表。此JSON不断更新,并列出最近登录到“最近”登录的用户。
如果显示为X号的用户重新登录,则会从位置X移除它们并将其放回位置[0]的JSON顶部。
我每5分钟检索一次JSON。我想要做的是检测旧对象oldUsers
和新newUsers
之间的差异,并将它们存储在另一个对象中,该对象只包含newUsers
中存在的用户但是不在oldUsers
。关于如何实现这个目标,我并不知道。
这是JSON结构:
[{
"id":"foo09",
"name":"John",
"age":28
}, {
"id":"bar171",
"name":"Bryan",
"age":36
},
...
]
有没有一种相当简单的方法呢?谢谢!
答案 0 :(得分:0)
您需要编写自己的diff算法。 JSBin中的Here is one I whipped up:
我需要一个实用程序函数来合并两个数组(Underscore会有帮助)。
function mergeArrays(val1, val2) {
var results = val1.splice(0);
val2.forEach(function(val) {
if (val1.indexOf(val) < 0) {
results.push(val);
}
});
return results;
}
function diff(val1, val2) {
var results = [];
var origKeys = Object.keys(val1);
var newKeys = Object.keys(val2);
mergeArrays(origKeys, newKeys)
.forEach(function(key) {
if (val1[key] === val2[key]) { return; }
var result = {
key: key,
orig: val1[key],
'new': val2[key]
};
if (val1[key] == null) {
result.type = 'add';
} else if (val2[key] == null) {
result.type = 'delete';
} else {
result.type = 'change';
}
results.push(result);
});
return results;
}