1

Javascript でオブジェクトの配列を更新する適切なロジックを見つけようとしているときに、いくつかの問題に遭遇しました。
サーバーにリクエストを送信して、最初の配列を取得します。次のようなオブジェクトの配列を取得します。

{id: 2, text: 'some text'}  //Object

そして、これは配列がどのように見えるかです:

[Object, Object, Object]    

これらのオブジェクトは html に変換されます。
しばらくすると、2 番目の要求が実行され、データ オブジェクトの新しいリストが取得されます。古いリストを新しいリストと同期するにはどうすればよいですか? 同期とは、もう存在しないオブジェクトを削除し、関連する html 部分も削除し、現在存在しないノードを正しい位置に挿入することです。

4

1 に答える 1

2

次のように、追加されたアイテムと削除されたアイテムの両方を見つけることができます。

var origArray = [...];   // assume first set of data is in origArray
var newArray = [...];    // second set of data is in newArray

function makeMap(array, key) {
    var map = {};
    for (var i = 0; i < array.length; i++) {
        map[array[i][key]] = true;
    }
    return(map);
}

function compareArrayToMap(array, map) {
    var item, var results = [];
    for (var i = 0; i < array.length; i++) {
        item = array[i];
        if (!(item.id in map)) {
            results.push(item);
        }
    }
    return(results);
}

// build id map for each array
var origMap = makeMap(origArray, "id");
var newMap = makeMap(newArray, "id");

// find items that have been removed
var removedItems = compareArrayToMap(origArray, newMap);

// find items that have been added
var addedItems = compareArrayToMap(newArray, origMap);
于 2012-07-13T16:54:06.607 に答える