Сравнение объектов переменного размера в Javascript - PullRequest
1 голос
/ 12 января 2011

Я работаю над автоматически обновляемой таблицей информации, используя AJAX, но я столкнулся с препятствием на дороге.Я использую PHP для возврата объекта JSON по каждому запросу, который содержит данные в следующем формате:

({
    "table": {
        "544532": {
            "field1": "data",
            "field2": "data2",
            "field3": "data3",
            .....
        },
        "544525": {
            "field1": "data",
            "field2": "data2",
            "field3": "data3",
            .....
        },
        ......
    }
}); //

Я использую Prototype.js, чтобы получить список идентификаторов в массиве:

var ids = Object.keys(data.table).sort();

Однако случайные строки таблицы могут исчезнуть из списка в любое время, а новые строки могут быть добавлены в конец в любое время.Я предполагаю, что буду хранить массив идентификаторов из предыдущего запроса и сравнивать их с новым массивом, но поскольку случайные строки могут исчезнуть, что приведет к смещению идентификаторов после этого, как мне сравнить их, чтобы я мог добавить только новые строки илиудалить удаленные строки со страницы?

Ответы [ 3 ]

2 голосов
/ 12 января 2011

К сожалению, 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);

Это тоже не слишком медленно, поскольку некоторые браузеры поддерживают indexOf, который проверяет и использует прототип include.

PS.Массив уже имеет функцию intersect, если вы хотите, чтобы complement тоже здесь, это было ...

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

По существу a.subtract(b) совпадает с b.complement(a).

0 голосов
/ 12 января 2011

Вам следует обновить структуру данных JSON при обновлении таблицы. Это было бы той моделью данных для страницы. Тогда вы можете просто звонить Object.keys(data.table) каждый раз, когда вам это нужно.

0 голосов
/ 12 января 2011

Я уверен, что есть лучшие способы сделать это - но вам нужно будет хранить строки, которые где-то показаны в таблице, - возможно, массив, - затем зациклить объект JSON, сравнивая строки с массивом.

...