如何在JS中遍历数组?

时间:2019-12-06 22:08:37

标签: javascript

我正在尝试编写一个要在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;
  }
});

4 个答案:

答案 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));