我希望能够返回数据的结果集,而只是将日期字段的格式更改为更易读的格式,而保留所有其他数据的完整性。我更愿意在没有第三方库的情况下进行此操作。

这是我到目前为止的内容:

//Get all the Tasks
function getAllTasks() {
  return models.gantt_tasks.findAll()
  .then(function(tasks){

    let results = tasks.map(task => task.start_date = task.start_date.format("YYYY-MM-DD"));
    return results;
  })
  .catch(function(e) {
    console.error(e);
    return e;
  });
}

我希望Map在返回数据之前完成。

最佳答案

.map()不是修改现有对象数组属性的常用方法。您可以这样做,但这不是.map()通常用于的目的。相反,这是一种创建新数组的方法。 .map()回调返回一个值,并将这些返回的值插入新数组,.map()最终返回。

您的.map()回调函数在将格式化日期分配给它之后隐式返回task.start_date。这意味着您仅创建一个带格式日期的数组,而没有其余的原始task对象。如果要在此处使用.map(),则需要在分配给task后返回task.start_date

但是,您可能想在.forEach()回调中使用.then()。这是完成此工作的方法:它仅遍历数组,并允许您在适当位置修改每个元素:

tasks.forEach( task => task.start_date = task.start_date.format("YYYY-MM-DD") );
return tasks;

另外,正如Dustin所说,从.then()返回一个值可能不会满足您的要求。最安全的选择是在此处使用tasks进行操作,或者调用另一个函数并将tasks作为参数传递。 (不过,我对 promise 有些不满意...)

关于javascript - 映射到一个对象并使用 native JS更改一个属性值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39462733/

10-12 12:26
查看更多