gpt4 book ai didi

javascript - 如何遍历JS对象和里面的所有数组和对象,与它的副本进行比较?

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:21 25 4
gpt4 key购买 nike

我在 Angular 中有一个 selectedItem 对象,它包含其他对象和数组。我使用 JSON 技巧创建了一个深拷贝:

$scope.editableItem = JSON.parse(JSON.stringify($scope.selectedItem))

然后我在输入中使用 editableItem 模型,更改其中的一些值。 selectedItem 没有改变。然后我想通过 PATCH 发送所有所做的更改,但不发送未更改的字段。因此,我需要从未更改的 selectedItem 中相同的所有字段中删除 editableItem

如何有效地做到这一点?我在考虑使用 Underscore 递归遍历对象,但我真的很想知道在解决它之前这是否是一种好的思考方式。

或者,我可能会创建第三个对象,它只包含第二个对象的触摸字段,动态添加,但我不确定如何处理。

编辑:明确地说,我希望答案是通用的,并假设可能是最复杂的对象结构。例如 this question 没有答案在这里适用,因为它们要么假设对象只有简单的字段,要么需要分别为每个字段显式设置 Angular 观察器。

最佳答案

我用这样的函数做了类似的事情:

function getUpdateObject(orig, current) {
varChanges = {};

for (var prop in orig) {
if (prop.indexOf("$") != 0 && orig[prop] !== current[prop]) {
varChanges[prop] = current[prop];
}
}
return varChanges ;
};

我认为这不会让您一路走下去。我不会在对象具有成员对象或数组的任何场景中使用它,但您应该能够测试“prop”是对象还是数组并递归调用它。我看到的关于该方法的最大警告是,如果你有一个深层的嵌套结构,你可能无法检测到变化,直到你下降了几个层次。您可能必须在内存中保留已更改属性的完整潜在层次结构,然后当您检测到较低级别的更改时,将整个层次结构写入输出对象。

关于javascript - 如何遍历JS对象和里面的所有数组和对象,与它的副本进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37116878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com