📅  最后修改于: 2023-12-03 15:25:11.782000             🧑  作者: Mango
在 TypeScript 中,我们经常需要处理对象数组,并且可能需要检查其中某些属性是否重复。这种情况下,我们可以使用一些方法来轻松地实现检查。
Set 是 ES6 中的一个高级数据结构,它允许我们存储唯一的值,非常适用于检查一个数组中是否有重复的值。
interface Person {
name: string;
age: number;
}
const people: Person[] = [
{ name: 'Bob', age: 20 },
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
];
const nameSet = new Set<string>();
let hasDuplicateName = false;
for (const person of people) {
if (nameSet.has(person.name)) {
hasDuplicateName = true;
break;
} else {
nameSet.add(person.name);
}
}
console.log(hasDuplicateName); // true
此代码首先定义了一个名为 Person
的接口,该接口描述了一个人的属性。接下来,我们定义了一个人员数组,其中存在两个具有相同名称“Bob”的人。
我们使用 Set<string>
来存储人员名称,并在遍历数组时逐个检查是否已存在该名称。如果名称已存在,则说明重复,将 hasDuplicateName
标记为 true
。
我们还可以使用数组的 reduce
方法来检查对象数组中是否有重复属性。
interface Person {
name: string;
age: number;
}
const people: Person[] = [
{ name: 'Bob', age: 20 },
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
];
const reduceResult = people.reduce(
(accumulator: { [name: string]: boolean }, current: Person) => {
if (accumulator[current.name]) {
accumulator[current.name] = true;
} else {
accumulator[current.name] = false;
}
return accumulator;
},
{}
);
const hasDuplicateName = Object.values(reduceResult).some((value) => value);
console.log(hasDuplicateName); // true
此代码中,我们使用 reduce
方法遍历整个数组,并在每个迭代中设置一个累加器对象来存储已经存在的名称。如果在遍历过程中找到了重复名称,则标记为 true
,否则标记为 false
。
最后,我们使用 Object.values
和 some
方法来检查某些属性是否被标记为重复。
在 TypeScript 中,我们可以使用 Set
和数组的 reduce
方法来轻松地检查对象数组中是否有重复的属性。通过这些方法,我们可以快速找出问题并进行相应的处理。