这段代码的含义是,如果对象的 differentValue
属性等于某个静态值,那么就将该对象的 value
属性添加到一个 Set
集合中。以下是对这个过程的基础概念解释和相关信息:
Set
只存储唯一的值,避免了重复。Set
可以简化去重的逻辑。Set
中比数组更快。Set
来跟踪某些状态的变化。const objects = [
{ value: 1, differentValue: 'A' },
{ value: 2, differentValue: 'B' },
{ value: 3, differentValue: 'A' },
{ value: 4, differentValue: 'C' }
];
const staticValue = 'A';
const resultSet = new Set();
objects.forEach(obj => {
if (obj.differentValue === staticValue) {
resultSet.add(obj.value);
}
});
console.log(resultSet); // 输出: Set { 1, 3 }
问题:如果 value
属性不是基本类型,而是对象或数组,可能会遇到引用相同的问题。
原因:JavaScript 中的对象和数组是通过引用比较的,即使两个对象的内容相同,它们也被认为是不同的。
解决方法:
function deepEqual(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}
objects.forEach(obj => {
if (obj.differentValue === staticValue && !resultSet.has(obj.value)) {
resultSet.add(obj.value);
}
});
通过这种方式,可以确保即使 value
是对象或数组,也能正确地处理唯一性。
领取专属 10元无门槛券
手把手带您无忧上云