防止数组添加重复对象是一个常见的需求,尤其是在处理复杂数据结构时。以下是一些基础概念和相关解决方案:
Set
和 JSON.stringify
function addUniqueObject(arr, newObj) {
const stringifiedArr = arr.map(obj => JSON.stringify(obj));
const stringifiedNewObj = JSON.stringify(newObj);
if (!stringifiedArr.includes(stringifiedNewObj)) {
arr.push(newObj);
}
}
const array = [];
const obj1 = { id: 1, name: 'Alice' };
const obj2 = { id: 2, name: 'Bob' };
const obj3 = { id: 1, name: 'Alice' }; // 重复对象
addUniqueObject(array, obj1);
addUniqueObject(array, obj2);
addUniqueObject(array, obj3);
console.log(array); // 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
Map
或 WeakMap
function addUniqueObject(arr, newObj) {
const map = new Map();
arr.forEach(obj => map.set(JSON.stringify(obj), obj));
if (!map.has(JSON.stringify(newObj))) {
map.set(JSON.stringify(newObj), newObj);
arr.push(newObj);
}
}
const array = [];
const obj1 = { id: 1, name: 'Alice' };
const obj2 = { id: 2, name: 'Bob' };
const obj3 = { id: 1, name: 'Alice' }; // 重复对象
addUniqueObject(array, obj1);
addUniqueObject(array, obj2);
addUniqueObject(array, obj3);
console.log(array); // 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
JSON.stringify
和 Map
的操作可能会变慢。JSON.stringify
可能会认为它们是不同的对象。JSON.stringify
会抛出错误。circular-json
)来处理循环引用。通过以上方法,可以有效地防止数组中添加重复的对象,确保数据的唯一性和完整性。
领取专属 10元无门槛券
手把手带您无忧上云