javascript - 比较 Javascript 中的可变大小对象

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

最佳答案

不幸的是,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/

相关文章:

python - 使用numpy生成彩色图像渐变

java - 如何将两个大数相乘

iphone - 需要帮助来解析复杂的 JSON

javascript - 如何在 JavaScript 中访问多维对象数组?

javascript - 更改 pickadate.js 中的日期

javascript - request.session.regenerate 不起作用,未定义 'undefined'

javascript - 使用 div 和任意嵌套的 div 获取选定的文本

javascript - 使用 html() 编辑标题标签的 jQuery 问题

objective-c - 如何从这个解析结果中单独获取日期和标题和描述

javascript - 使用 javascript 从查询创建文件