我正在尝试编写一个要在todos数组中进行迭代的函数。如果todos有一个值,则返回该值,否则返回一个字符串,说明“尚无待办事项!”。但是我不确定我是否正确编写了函数或如何调用函数。
const todos = [
{todo: 'Go to the gym', done: true},
{todo: 'Cook dinner', done: false},
{todo: 'Watch a movie', done: false}
];
todos.forEach(function(t) {
if (todos.length === 0 ) {
return 'There are no To Dos yet!';
} else {
return t.todo;
}
});
答案 0 :(得分:0)
请尝试以下操作:
const todos = [
{todo: 'Go to the gym', done: true},
{todo: 'Cook dinner', done: false},
{todo: 'Watch a movie', done: false}
];
if (todos.length > 0) {
todos.forEach(function(t) {
console.log(t.todo);
});
}
else {
return 'There are no To Dos yet!';
}
答案 1 :(得分:0)
您可以使用Array.prototype.every
测试每个待办事项是否已完成:
const todos = [
{ todo: 'Go to the gym', done: true },
{ todo: 'Cook dinner', done: false },
{ todo: 'Watch a movie', done: false }
];
printTodos(todos);
todos.forEach(todo => todo.done = true); // All done..
printTodos(todos);
function printTodos(todos) {
return console.log(todos.every(todo => todo.done)
? 'There are no To-Dos yet!'
: todos.filter(todo => !todo.done)
.map(todo => '- ' + todo.todo)
.join('\n'))
}
由于我们仍然需要映射它们,因此我们只对其进行过滤。
const todos = [
{ todo: 'Go to the gym', done: true },
{ todo: 'Cook dinner', done: false },
{ todo: 'Watch a movie', done: false }
];
printTodos(todos);
todos.forEach(todo => todo.done = true); // All done..
printTodos(todos);
function printTodos(todos) {
let notCompleted = todos.filter(todo => !todo.done);
return console.log(notCompleted.length === 0
? 'There are no To-Dos yet!'
: notCompleted.map(todo => '- ' + todo.todo).join('\n'))
}
答案 2 :(得分:0)
由于forEach不返回任何内容,请尝试使用.map()
来返回转换后的数组。
const getTodos = todos => {
const result = todos.map(({ todo }) => todo);
return result.length ? result : "There are no todos yet";
}
getTodos(todos) // ["Go to the gym", "Cook dinner", "etc."]
getTodos([]) // "There are no todos yet"
如果您只想按done
属性过滤待办事项,请对其进行链式过滤:
const getTodos = todos => {
const result = todos
.filter(todo => !todo.done)
.map(({ todo }) => todo)
return result.length ? result : "There are no todos yet";
}
getTodos(todos) // ["Go to the gym"]
getTodos([]) // "There are no todos yet"
答案 3 :(得分:0)
您可以映射togo
数组并将其连接到字符串或返回消息。
const
getTodos = todos => todos.map(({ todo }) => todo).join(', ') || 'There are no To Dos yet!',
todos = [{ todo: 'Go to the gym', done: true }, { todo: 'Cook dinner', done: false }, { todo: 'Watch a movie', done: false }];
console.log(getTodos([]));
console.log(getTodos(todos));