📌  相关文章
📜  对象数组如何检查属性是否重复 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:25:11.782000             🧑  作者: Mango

TypeScript:对象数组如何检查属性是否重复

在 TypeScript 中,我们经常需要处理对象数组,并且可能需要检查其中某些属性是否重复。这种情况下,我们可以使用一些方法来轻松地实现检查。

方法一:使用 Set

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 方法

我们还可以使用数组的 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.valuessome 方法来检查某些属性是否被标记为重复。

总结

在 TypeScript 中,我们可以使用 Set 和数组的 reduce 方法来轻松地检查对象数组中是否有重复的属性。通过这些方法,我们可以快速找出问题并进行相应的处理。