我有以下映射的对象数组,我正在使用filter()
。这是一个TO DO任务列表,我只想从中筛选出尚未完成的任务,但没有false
值表明它们尚未完成)。换句话说,我只想自己展示任务,如果确实如此,那么它们还没有完成。
代码的目的是学习从过滤内容中省略该数据(false
)声明的好方法。
let todos = [
{
todo: 'Buy apples',
done: false
},
{
todo: 'Wash car',
done: true
},
{
todo: 'Write web app',
done: false
},
{
todo: 'Read MDN page on JavaScript arrays',
done: true
},
{
todo: 'Call mom',
done: false
}
];
我试过了:
unfinishedTasks = todos.map( (e)=> e).filter( (e)=> e.done == false);
以及:
unfinishedTasks = todos.filter( (e)=> e).map( (e)=> if ( e.done == false ) {e.todo} );
第一个输出基本上是正确的 - 假的todo在那里,但是在它们附近有false
关键字 - 我想省略的关键字,当然:
[{“todo”:“Buy apples”,“done”:false},{“todo”:“Write web app”,“done”:false},{“todo”:“call mom”,“完成“:假}]
第二个输出:
意外的标记“if”。
我想要的(从输出中省略false
关键字):
[“购买苹果”,“写网络应用”,“致电妈妈”]
我在teamtreehouse.com执行代码段中运行代码。要在那里进行测试,必须是注册的树屋学生。
我可能需要在已过滤的内容上使用其他filter()
,或使用某些if-than
语句?我没有线索。
答案 0 :(得分:1)
首先按item.done
过滤,然后映射到item.todo
:
const todos = [{ todo: 'Buy apples', done: false }, { todo: 'Wash car', done: true }, { todo: 'Write web app', done: false }, { todo: 'Read MDN page on JavaScript arrays', done: true }, { todo: 'Call mom', done: false } ];
const out = todos
.filter(item => !item.done)
.map(item => item.todo);
console.log(out); // ["Buy apples", "Write web app", "Call mom"]