在映射的对象数组上使用filter(),但省略了用于过滤的数据

时间:2017-11-28 17:48:57

标签: ecmascript-6

我有以下映射的对象数组,我正在使用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语句?我没有线索。

1 个答案:

答案 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"]