ann*_*123 4 javascript arrays functional-programming
我有一个数组对象,在该数组对象中,我需要根据isVerfied属性过滤并创建一个数组。
如果isVerfied属性为真,我只需要推送对象的 name 属性而不是将整个对象推送到数组中
我试过这个,但它似乎没有工作,因为它正在推动整个对象。
const users = [
{
name: 'Varun',
age: '18',
isVerfied: 'true'
},
{
name: 'Rahul',
age: '12',
}
]
const verfiedUserNameNew = users.filter(user => {
if (user.isVerfied) return user.name
})
console.log(verfiedUserNameNew) Run Code Online (Sandbox Code Playgroud)
我也试过地图
const users = [
{
name: 'Varun',
age: '18',
isVerfied: 'true'
},
{
name: 'Rahul',
age: '12',
},
]
const verfiedUserNameNew = users.map(user => {
if (user.isVerfied) return user.name
})
console.log(verfiedUserNameNew)Run Code Online (Sandbox Code Playgroud)
但随后它返回 varun 和 undefined。我知道另一种解决方案是创建一个数组并运行一个 for.Each 循环,在该循环中放置一个 if 条件,然后将元素推入一个数组中
const users = [
{
name: 'Varun',
age: '18',
isVerfied: 'true'
},
{
name: 'Rahul',
age: '12',
},
]
const newArray = []
users.forEach(element => {
if (element.isVerfied) {
newArray.push(element.name)
}
})
console.log(newArray)Run Code Online (Sandbox Code Playgroud)
但是我在想我们是否可以使用过滤方法来实现这一点?
无论是filter还是map 对自己能做到这一点。
您有多种选择:
filter然后map。这简单明了,适用于多达数百或数千个条目的数组(至少),因为它对数据进行了两次传递(好吧,一次传递所有数据,第二次传递过滤后的结果) . 除非您处理的是真正庞大的阵列,否则不应该有任何性能问题。reduce,人们通常会这样做,尽管坦率地说,这只是 #2 之上的额外复杂性。这是#1:
const verfiedUserNameNew = users
.filter(user => user.isVerified)
.map(({name}) => name);
Run Code Online (Sandbox Code Playgroud)
实时复制:
const verfiedUserNameNew = users
.filter(user => user.isVerified)
.map(({name}) => name);
Run Code Online (Sandbox Code Playgroud)
我还在那里修复了另外两个东西:
isVerifiedisVerified这是#2:
const verfiedUserNameNew = [];
for (const {isVerified, name} of users) {
if (isVerified) {
verfiedUserNameNew.push(name);
}
}
Run Code Online (Sandbox Code Playgroud)
实时复制:
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);Run Code Online (Sandbox Code Playgroud)
这是#3,但同样,这只是#2 的一个更复杂、更难阅读和调试的版本:
const verfiedUserNameNew = users.reduce((verified, {isVerified, name}) => {
if (isVerified) {
verified.push(name);
}
return verified;
}, []);
Run Code Online (Sandbox Code Playgroud)
实时复制:
const verfiedUserNameNew = [];
for (const {isVerified, name} of users) {
if (isVerified) {
verfiedUserNameNew.push(name);
}
}
Run Code Online (Sandbox Code Playgroud)
你会看到人们这样做:
const verfiedUserNameNew = users.reduce((v, {isVerified, name}) => ((isVerified ? v.push(name) : undefined), v), []);
Run Code Online (Sandbox Code Playgroud)
或类似的使它看起来比它更简单,但是,嗯...... :-)
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |