2012-07-13 84 views
1

我在嘗試找到更好的邏輯來更新Javascript中的對象數組時遇到了一些困難。
我通過向服務器發出請求來獲得第一個數組。我得到的對象類似以下的數組:Javascript和jQuery:更新對象數組

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

而這正是數組的樣子:

[Object, Object, Object]  

這些對象變成HTML。
過了一段時間,它執行第二個請求並獲取一個新的數據對象列表。我怎樣才能將舊列表與新列表同步?我的意思是同步:刪除不再存在的對象和關聯的html部分,並將當前不存在的節點插入到正確的位置。

+0

是'id'唯一的每個對象? – climbage 2012-07-13 16:43:15

+0

@climbage是的,它是 – Andrew 2012-07-13 16:43:39

+0

HTML是什麼樣的? – climbage 2012-07-13 16:46:48

回答

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);