Возвращая свойства массива массива значений Javascript - PullRequest
0 голосов
/ 10 марта 2019

Мне нужно знать, есть ли причудливый способ вернуть массив строк, созданный свойствами массива объектов. Свойство этих объектов также является массивом.

Например, данные:

[
 {
  servicesOffered: ["x","Y"]
 },
 {
  servicesOffered: ["z","w"]
 }
]

Я пытался проявить фантазию, используя оператор распространения, но не работает. Я знаю, что могу снова выполнить итерацию массива servicesOffered, но я не знаю, есть ли более изящный или лучший способ сделать это.

Код:

 getServices(results: Business[]): string[] {
    return results.map(({ servicesOffered }) => {
      const t = servicesOffered;
      return ...t;
    });
  }

Ожидаемый результат

["x","Y","z","w"]

Ответы [ 2 ]

3 голосов
/ 10 марта 2019

Используйте Array.flatMap() вместо карты:

function getServices(results) {
  return results.flatMap(({ servicesOffered }) => servicesOffered);
}

const data = [{"servicesOffered":["x","Y"]},{"servicesOffered":["z","w"]}];

const result = getServices(data);

console.log(result);

Если flatMap не поддерживается, вы можете использовать Array.map() со спредом и Array.concat(), чтобы сгладить массив:

function getServices(results) {
  return [].concat(...results.map(({ servicesOffered }) => servicesOffered));
}

const data = [{"servicesOffered":["x","Y"]},{"servicesOffered":["z","w"]}];

const result = getServices(data);

console.log(result);
1 голос
/ 10 марта 2019

Использование функции reduce.

let arr = [ {  servicesOffered: ["x","Y"] }, {  servicesOffered:["z","w"] }],
    result = arr.reduce((a, {servicesOffered}) => a.concat(servicesOffered), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...