У меня есть массив объектов,
[
{name: 'Bob', age: 22, hidden: false },
{name: 'Jessica', age: 60, hidden: false },
{name: 'Marley', age: 34, hidden: true },
{name: 'Michella', age: 12, hidden: false },
{name: 'Sam', age: 10, hidden: true }
]
Что я хочу сделать, так это получить массив имен, но мне нужно это имя только в том случае, если hidden:false
поэтому конечный результат будет выглядеть так, ['Bob', 'Jessica', 'Michella']
Если я сделаю,
const names = myArray.filter((array) => {
if (array.hidden) {
return array.name
}
});
Затем я получаю объекты в массиве, которые не скрыты, но я не могу понять, как фильтровать объекты, чтобы просто получить массив имен? Я правильно использую фильтр?
myArray.filter(array => array.hidden)
чтобы получить только скрытые объекты. Затем используйте map()
, чтобы получить только имена: myArray.filter(array => array.hidden).map(array => array.name)
Сначала выполните .filter()
, а затем используйте .map()
, чтобы преобразовать отфильтрованный массив объектов в массив строк (имен).
Просто используйте уменьшить, чтобы объединить оба действия [].reduce((previous, current) => {!current.hidden && previous.push(current.name); return previous}, [])
.
Вы можете использовать array.filter с проверкой желаемого условия !hidden
и array.map, чтобы получить имена пользователей.
const data = [
{name: 'Bob', age: 22, hidden: false },
{name: 'Jessica', age: 60, hidden: false },
{name: 'Marley', age: 34, hidden: true },
{name: 'Michella', age: 12, hidden: false },
{name: 'Sam', age: 10, hidden: true }
];
const names = data.filter(({hidden}) => !hidden).map(({name}) => name)
console.info(names);
"Я правильно использую фильтр?" нет,
.filter()
только фильтрует массив. Из массива с несколькими элементами вы получаете массив с потенциально меньшим количеством элементов. Вот и все. Это фильтрация. Он также не выполняет преобразование, так как это отдельная операция, которая не фильтрует.