Ни filter
, ни map
сами по себе не могут этого сделать.
У вас есть несколько вариантов:
filter
, а затем map
. Это просто и понятно и подходит для массивов до сотен или менее тысяч записей (по крайней мере), так как он делает два прохода через данные (ну, один проход через все данные и второй проход через отфильтрованный результат) , Если вы не имеете дело с действительно массивным массивом, не должно быть никаких проблем с производительностью.
- Используйте простой цикл и добавьте массив, созданный до цикла.
- Используйте
reduce
, что обычно делают люди, хотя, честно говоря, это просто дополнительное осложнение поверх # 2.
Вот # 1:
const verfiedUserNameNew = users
.filter(user => user.isVerified)
.map(({name}) => name);
Live Copy:
const users = [
{
name: 'Varun',
age: '18',
isVerified: true
},
{
name: 'Rahul',
age: '12',
},
];
const verfiedUserNameNew = users
.filter(user => user.isVerified)
.map(({name}) => name);
console.log(verfiedUserNameNew);
Я также исправил две другие проблемы:
- Исправлено написание
isVerified
- Используется логическое значение, а не строка, для
isVerified
Вот # 2:
const verfiedUserNameNew = [];
for (const {isVerified, name} of users) {
if (isVerified) {
verfiedUserNameNew.push(name);
}
}
Live Copy:
const users = [
{
name: 'Varun',
age: '18',
isVerified: true
},
{
name: 'Rahul',
age: '12',
},
];
const verfiedUserNameNew = [];
for (const {isVerified, name} of users) {
if (isVerified) {
verfiedUserNameNew.push(name);
}
}
console.log(verfiedUserNameNew);
Вот # 3, но, опять же, это просто более сложная, сложная для чтения и отладки версия # 2:
const verfiedUserNameNew = users.reduce((verified, {isVerified, name}) => {
if (isVerified) {
verified.push(name);
}
return verified;
}, []);
Live Copy:
const users = [
{
name: 'Varun',
age: '18',
isVerified: true
},
{
name: 'Rahul',
age: '12',
},
];
const verfiedUserNameNew = users.reduce((verified, {isVerified, name}) => {
if (isVerified) {
verified.push(name);
}
return verified;
}, []);
console.log(verfiedUserNameNew);
Вы увидите, как люди делают это:
const verfiedUserNameNew = users.reduce((v, {isVerified, name}) => ((isVerified ? v.push(name) : undefined), v), []);
или аналогичный, чтобы он выглядел так, как будто это проще, чем оно есть, но, хорошо ...: -)