我在尝试找到一个好的逻辑来更新Javascript中的对象数组时遇到了一些困难 我通过向服务器发出请求来获取第一个数组。我得到一个像下面那样的对象数组:
{id: 2, text: 'some text'} //Object
这就是数组的样子:
[Object, Object, Object]
这些对象变成了html 一段时间后,它会执行第二个请求并获取新的数据对象列表。如何将旧列表与新列表同步?同义的意思是:删除不再存在的对象,以及相关的html部分,并插入当前不在正确位置的节点。
答案 0 :(得分: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);