Разрушение одноименных свойств аргументов объекта; разрешить много вместо фиксированного количества аргументов - PullRequest
0 голосов
/ 23 мая 2019

У меня есть функция, которая предназначена для получения двух параметров (оба экземпляра объекта одного и того же класса):

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: мне интересно, есть ли здесь более элегантный способ использовать уничтожение объектов?

Q2: Как бы я поступил?функция, которая принимает любое количество Person объектов (и работает только со свойством name каждого)?

1 Ответ

2 голосов
/ 23 мая 2019

Я думаю, что невозможно использовать деструктуризацию объектов с переменным числом аргументов ... Вы можете сделать что-то вроде этого

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));
...