У меня есть объект:
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"}]
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)
Вы можете использовать .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);
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);
Вы можете сопоставить свойство с деструктуризацией,
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);
Создайте пустой массив, переберите существующий 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;
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.