我从服务器获取对象列表
[{name:'test01', age:10},{name:'test02', age:20},{name:'test03', age:30}]
我将它们加载到html控件中,以供用户编辑。然后是一个按钮,用于将整个列表批量保存回数据库。
除了发送整个列表,我只想发送已更改对象的子集。
它可以是数组中任意数量的项目。我想做一些类似于Angular的框架,在未做任何更改的情况下将对象属性标记为“原始”。然后使用该标志仅将非“原始”的项目(已修改的项目)发布到服务器。
这是下面的函数,当提供旧的对象数组和新的对象数组时,该函数将返回更改的对象数组:
getChanges = function(oldArray, newArray) {
var changes, i, item, j, len;
if (JSON.stringify(oldArray) === JSON.stringify(newArray)) {
return false;
}
changes = [];
for (i = j = 0, len = newArray.length; j < len; i = ++j) {
item = newArray[i];
if (JSON.stringify(item) !== JSON.stringify(oldArray[i])) {
changes.push(item);
}
}
return changes;
};
例如:
var older = [{name:'test01', age:10},{name:'test02', age:20},{name:'test03', age:30}]
var newer = [{name:'test01', age:10},{name:'test02', age:20},{name:'test03', age:20}]
getChanges(older, newer)
(请注意,test03的年龄现在是20)
[{name:'test03', age:20}]
您只需要导出客户端完整的已编辑值列表,将其与旧列表进行比较,然后将更改列表发送到服务器即可。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句