получение определенных значений от объектов в массивах - PullRequest
0 голосов
/ 25 мая 2018

Рассматривая следующий массив, который включает в себя несколько объектов, я попытался получить конкретные значения в одном массиве. Чтобы выразить это деликатно, я хотел вытащить имена людей, которые были в «красной» команде.

// 
    const array = [
      {
        username: "Mike",
        team: "red",
        score: 20,
     items: ["bat", "book", "gloves"]
  },
  {
    username: "Moe",
    team: "blue",
    score: 30,
    items: ["cellphone", "backpack", "cards"]
  },
  {
    username: "Ellie",
    team: "red",
    score: 15,
    items: ["ball", "canteen", "crayon"]
  },
  {
    username: "little_joe",
    team: "green",
    score: 1,
    items: ["book", "pencil"]
  },

];

//using filter method :

const filterArray=array.filter((num)=>{ if (num.team==="red" ){ return num.username}});
console.log(filterArray);

//result : an array including two objects full of unwanted values.

Что я должен сделать, чтобы получить один единственный массив с только желаемым значением (не два больших объекта)?

Я пытаюсь получить такой массив: (2) ► [Mike, Ellie]

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Как предполагает @Barmar, вот версия, использующая reduce:

const redTeamPeople = array.reduce((people, { team, username }) => {
  if (team === "red") {
    people.push(username);
  }

  return people;
}, []);
0 голосов
/ 25 мая 2018

Один из способов сделать это - использовать Array.prototype.filter и Array.prototype.map.Тем не менее, предпочтительный способ будет использовать Array.prototype.reduce, поскольку он будет гораздо более эффективным.

Вот так:

const array = [{
    username: "Mike",
    team: "red",
    score: 20,
    items: ["bat", "book", "gloves"]
  },
  {
    username: "Moe",
    team: "blue",
    score: 30,
    items: ["cellphone", "backpack", "cards"]
  },
  {
    username: "Ellie",
    team: "red",
    score: 15,
    items: ["ball", "canteen", "crayon"]
  },
  {
    username: "little_joe",
    team: "green",
    score: 1,
    items: ["book", "pencil"]
  },

];

const newArray = array.reduce((n, val) => {
  if(val.team == "red") n.push(val.username);
  return n;
}, []);

console.log(newArray);
0 голосов
/ 25 мая 2018

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

Вы можете сделать это за двашаги.Сначала используйте filter, чтобы получить только элементы с team === "red", затем используйте map, чтобы извлечь username:

const filterArray = array.filter(num => num.team === "red").map(num => num.username);

Вы также можете сделать это за один шаг, используя reduce, I 'оставлю это как упражнение для читателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...