在Javascript中比较可变大小的对象

时间:2011-01-12 17:20:19

标签: javascript arrays json object prototype

我正在使用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,如何比较这些以便我只能添加新行或从页面中删除已删除的行?

3 个答案:

答案 0 :(得分:2)

不幸的是,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的indexOf检查和使用的include,因此速度也不会太慢。

<子> PS。数组已经有一个intersect函数,如果你想要一个complement,那么......

Array.prototype.complement = function(a){
    return a.reject(this.include.bind(this));
}

基本上a.subtract(b)b.complement(a)相同。

答案 1 :(得分:0)

我确定有更好的方法可以做到这一点 - 但是您需要存储表格中显示的行 - 可能是数组 - 然后循环JSON对象,将行与数组进行比较。

答案 2 :(得分:0)

更新表时应更新JSON数据结构。那将是页面的数据模型。然后,您可以在每次需要时致电Object.keys(data.table)