使用 Set 检测 JavaScript 对象值的变化

2023-11-30 00:01:41 浏览数 (1)

这种 JavaScript 方法旨在通过将对象文字的值转换为数组,然后转换为集合,以便比较之前和之后状态之间的唯一值,从而检测对象文字的更改。

总结一下这个过程:

  1. 从对象值创建数组: 使用 Object.values() 方法将对象文字 beforeafter 的值提取为数组。
  2. 合并数组:beforeArrafterArr 的值使用扩展运算符(...)合并为单个数组。
  3. 创建集合: 从合并后的数组(mergedSet)和 before 对象的值数组(beforeSet)创建集合。
  4. 比较: 通过比较集合的大小(mergedSetbeforeSet),代码确定对象是否发生了更改。
代码语言:javascript复制
let before = { name: "Ygritte", married: false, home: "North of the wall" };
let after = { name: "Ygritte Snow", married: true, home: "Winterfell" };

let beforeArr = Object.values(before); // ['Ygritte', false, 'North of the wall']
let afterArr = Object.values(after); // ['Ygritte Snow', true, 'Winterfell']
let merged = [...beforeArr, ...afterArr]; // ['Ygritte', false, 'North of the wall', 'Ygritte Snow', true, 'Winterfell']

// 创建集合
let mergedSet = new Set(merged);
let beforeSet = new Set(beforeArr);

if (mergedSet.size > beforeSet.size) {
  console.log('检测到变化');
} else {
  console.log('无变化');
}

然而,需要注意的是,在某些自动生成动态属性(如updated_atcreated_at等)的情况下,此方法可能并不完全可靠。为了解决这个问题,您可以在执行比较之前删除这些属性(就像您提供的代码中的警告部分所示),或者您可以在比较过程中明确考虑这些属性,以避免在仅动态属性已修改时误报更改。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞