Spread Operator для получения одного свойства объектов внутри массива - JS / TS - PullRequest
2 голосов
/ 27 апреля 2019

Допустим, у меня есть:

const arr = [
  {label: 1, value: "One"},
  {label: 2, value: "two"}
}

Я хочу получить value из него как строковый массив,

Традиционный способ:

const strArr = [];
arr.forEach(ele => {strArr.push(ele.value)});
console.log(strArr);

Но могу ли я сделать это с помощью оператора распространения или любым другим способом?

Ответы [ 4 ]

3 голосов
/ 27 апреля 2019

Вы можете использовать Array#map метод.

const arr = [{
    label: 1,
    value: "One"
  },
  {
    label: 2,
    value: "two"
  }
]

let res = arr.map(o => o.value)
// or in case you want to create an object with only value 
// property then you can use Destructuring
// .map(({ value }) => ({ value }))

console.log(res)
2 голосов
/ 27 апреля 2019

Вы можете использовать Array.from, определив функцию отображения:

const arr = [
  {label: 1, value: "One"},
  {label: 2, value: "two"}
];

const vals = Array.from(arr, o => o.value);
console.log(vals);
1 голос
/ 27 апреля 2019

Я бы также использовал .map () в этом случае. Но если вы действительно хотите использовать оператор распространения, вы можете сделать это.

const arr = [
  {label: 1, value: "One"},
  {label: 2, value: "two"}
];

const res = []

for (let obj of arr) {
  res = [...res, obj.value]
}
console.log(res)
1 голос
/ 27 апреля 2019

Вы не можете сделать это с помощью оператора распространения. Вместо этого используйте map().

const arr = [{label: 1, value: "One"}, {label: 2, value: "two"}]

const res = arr.map(x => x.value);
console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...