解构对象参数的同名属性;允许许多而不是固定数量的参数

Destructuring same-name properties of object arguments; allow many instead of a fixed number of arguments

我有一个函数要接收两个参数(相同 class 的两个对象实例):

class Person {
  constructor(name) {
    this.name = name;
  }
}

const x = new Person('Peter');
const y = new Person('Paul');
const z = new Person('Paul');

const sameName = (a, b) => a.name === b.name;

console.log(sameName(x,y));
console.log(sameName(y,z));
console.log(sameName(x,z));

我知道在函数签名中解构每个人的名字的有效方法是 sameName({name: a},{name: b})。不知何故感觉笨拙。

class Person {
  constructor(name) {
    this.name = name;
  }
}

const x = new Person('Peter');
const y = new Person('Paul');
const z = new Person('Paul');

const sameName = ({name: a},{name: b}) => a === b;

console.log(sameName(x,y));
console.log(sameName(y,z));
console.log(sameName(x,z));

Q1:我想知道这里是否有更优雅的方式来使用对象解构?

问题 2:我将如何处理接受任意数量 Person 对象(并且仅适用于每个对象的 name 属性 的函数?

我认为不可能使用带有可变数量参数的对象解构...你可以这样做

class Person {
  constructor(name) {
    this.name = name;
  }
}

const x = new Person('Peter');
const y = new Person('Paul');
const z = new Person('Paul');

const sameName = ({ name }, ...people) =>
  people.every(person => person.name === name);

console.log(sameName(x,y));
console.log(sameName(y,z));
console.log(sameName(x,z));