我正在使用 AJAX 开发一个自动更新的信息表,但我遇到了一个障碍。我使用 PHP 在每个请求上返回一个 JSON 对象,其中包含以下格式的数据:
({
"table": {
"544532": {
"field1": "data",
"field2": "data2",
"field3": "data3",
.....
},
"544525": {
"field1": "data",
"field2": "data2",
"field3": "data3",
.....
},
......
}
}); //
我使用 Prototype.js 将 ID 列表放入数组中:
var ids = Object.keys(data.table).sort();
但是,表格的随机行可能随时从列表中消失,并且新行可能随时添加到末尾。我假设我会存储上一个请求中的 ID 数组并将它们与新数组进行比较,但是由于随机行可能会消失,因此在该行之后移动 ID,我如何比较这些以便我只能添加新行或从页面中删除已删除的行?
最佳答案
不幸的是,Prototype 不包含 Set 类型,这会使事情变得更加简单。所以我们必须凑合着用这个:
Array.prototype.subtract = function(a){
return this.reject(this.include.bind(a));
}
上面添加了一个非常需要的 subtract
函数。我们可以这样使用它:
added_ids = new_ids.subtract(old_ids);
removed_ids = old_ids.subtract(new_ids);
它也不会太慢,因为一些浏览器支持 Prototype 的 include
检查和使用的 indexOf
。
附言。 Array 已经有一个intersect
函数,如果你还想要一个complement
,它是...
Array.prototype.complement = function(a){
return a.reject(this.include.bind(this));
}
本质上 a.subtract(b)
与 b.complement(a)
相同。
关于javascript - 比较 Javascript 中的可变大小对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671794/