У меня есть объект:

const animals = [
    {name: 'Fluffy', species: 'cat'},
    {name: 'Crinkle', species: 'rabbit'},
    {name: 'Wally', species: 'dog'},
    {name: 'Roo', species: 'dog'},
    {name: 'Felix', species: 'cat'},
]

Я хочу использовать функцию более высокого порядка, такую как метод filter (), чтобы взять массив объектов животных и вернуть массив только с именами всех собак, т.е. ["Wally", "Roo"]. Мой код на данный момент возвращает массив, содержащий весь объект с видом собаки в нем. См. ниже:

const dogArray = animals.filter(function(animal) {
  return animal.species === 'dog';
 })

return dogArray;

// returns
// [{name: "Wally", species: "dog"}, 
// { name: "Roo", species: "dog"}]
0
TommyR 21 Авг 2018 в 15:42

5 ответов

Лучший ответ

Просто сопоставьте элементы фильтруемого массива с их свойством name:

const animals = [
  {name: 'Fluffy', species: 'cat'},
  {name: 'Crinkle', species: 'rabbit'},
  {name: 'Wally', species: 'dog'},
  {name: 'Roo', species: 'dog'},
  {name: 'Felix', species: 'cat'},
]

const dogArray = animals.filter(animal => animal.species === 'dog');

console.log(dogArray.map(dog => dog.name));

Или объедините два в одно сокращение:

const animals = [
  {name: 'Fluffy', species: 'cat'},
  {name: 'Crinkle', species: 'rabbit'},
  {name: 'Wally', species: 'dog'},
  {name: 'Roo', species: 'dog'},
  {name: 'Felix', species: 'cat'},
]

let dogArray = animals.reduce((dogs, animal) => {
  if (animal.species === "dog") dogs.push(animal.name);
  return dogs;
}, []);

console.log(dogArray)
2
Luca Kiebel 21 Авг 2018 в 13:00

Вы можете использовать .filter(), а затем .map():

const animals = [
  {name: 'Fluffy', species: 'cat'},
  {name: 'Crinkle', species: 'rabbit'},
  {name: 'Wally', species: 'dog'},
  {name: 'Roo', species: 'dog'},
  {name: 'Felix', species: 'cat'},
];

const dogNames = animals
  .filter(animal => animal.species === 'dog')
  .map(dog => dog.name);

console.log(dogNames);
0
Peter B 21 Авг 2018 в 12:50
const animals = [
{name: 'Fluffy', species: 'cat'},
{name: 'Crinkle', species: 'rabbit'},
{name: 'Wally', species: 'dog'},
{name: 'Roo', species: 'dog'},
{name: 'Felix', species: 'cat'},
]

var result = animals.filter(val=>val.species=="dog").map(({name})=>name);

console.log(result);
0
Nishant Dixit 21 Авг 2018 в 12:45

Вы можете сопоставить свойство с деструктуризацией,

const
    animals = [{ name: 'Fluffy', species: 'cat' }, { name: 'Crinkle', species: 'rabbit' }, { name: 'Wally', species: 'dog' }, { name: 'Roo', species: 'dog' }, { name: 'Felix', species: 'cat' }]
    dogArray = animals
        .filter(({ species }) => species === 'dog')
        .map(({ name }) => name);

console.log(dogArray);
1
Nina Scholz 21 Авг 2018 в 12:59

Создайте пустой массив, переберите существующий dogArray, используя цикл for, вставьте имена в новый массив и верните новый массив.

const dogArray = animals.filter(function(animal) {
  return animal.species === 'dog';
 })

let dogNames = [];

for (let i in dogArray) {
  dogNames.push(dogArray[i].name);
}

return dogNames;
0
223seneca 21 Авг 2018 в 12:55
51948940