我希望能够返回数据的结果集,而只是将日期字段的格式更改为更易读的格式,而保留所有其他数据的完整性。我更愿意在没有第三方库的情况下进行此操作。
这是我到目前为止的内容:
//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/