我是javascript的新手并循环显示完整列表的列表,但如果object属性的属性设置为true,我不想显示它。由于pop
或delete
不起作用,我无法弄清楚循环内容是什么。
for (const user of users) {
user.name = `${user.firstname}`;
if (user.disabled === true) {
/* not sure what to do here*/
}
}
答案 0 :(得分:3)
您想要filter和map个新对象(添加新属性name
)。
但是,不是在数组上循环两次,而是可以使用.reduce
在同一次迭代中过滤和映射对象。
运行示例:
const users = [
{firstName: 'john', disabled: false},
{firstName: 'jane', disabled: true},
{firstName: 'moe', disabled: false},
{firstName: 'doe', disabled: true},
];
const nextUsers = users.reduce((result, current) => {
if(!current.disabled){
result.push({
...current,
name: current.firstName
});
}
return result;
},[]);
console.log(nextUsers);

答案 1 :(得分:2)
根据您在代码中显示的内容,我假设您拥有一组至少包含属性name
,firstName
和disabled
的用户。
您可以使用ES6完全支持的方法filter
,以便从阵列中删除不符合您要检查的属性的对象。
为此,您使用方法filter
循环数组,检查属性disabled
是否为false
。
const users = [
{
name: "Name1",
firstName: "firstName1",
disabled: true,
},{
name: "Name2",
firstName: "firstName2",
disabled: false,
},
];
const usersFiltered = users.filter(user => !user.disabled);
console.log(usersFiltered);
注意:如果没有填充,这将无法在IE 8或更低版本中使用。
答案 2 :(得分:-1)
如果您想要更高效的方式,可以使用Array.prototype.reduce
以单向方式执行这两项操作const filteredUsers = users.reduce((newUsersArray, user) => {
user.name = `${user.firstName}`
if (!user.disabled) {
newUsersArray.push(user)
}
return newUsersArray
}, [])
由于users
是一个数组,您可以使用
users.filter(user => !user.disabled).forEach(user => user.name = user.firstName)
所以Array.prototype.filter是一种过滤你的数组的方法:如果迭代遍历数组内的每个对象的函数结果为false,它将不包括在结果数组中
Array.prototype.forEach遍历所有项目并允许更改每个项目。