【发布时间】:2018-04-21 04:27:03
【问题描述】:
我正在使用 Express 并且有一个对象数组。我想修改 created 属性(我使用 dateFormat 包)进行演示。
该数组是 mongo 查询的结果,并分配给变量 stories,如下所示:
[
{ public: false,
keyStageLevel: [ 'ks1' ],
created: 2018-03-25T13:01:30.809Z,
_id: 5ab79daafa832035b416536f,
slug: 'goldilocks',
name: 'Goldilocks',
comments: null,
id: '5ab79daafa832035b416536f' },
{ public: false,
keyStageLevel: [ 'ks1' ],
created: 2018-03-25T13:07:22.421Z,
_id: 5ab79f0afa832035b4165370,
slug: 'cinderella',
name: 'Cinderella',
comments: null,
id: '5ab79f0afa832035b4165370' },
..
]
如果我执行
stories.map(function(story){
story.created = dateFormat(story.created, "dddd, mmmm dS, yyyy, h:MM:ss TT")
console.log('AFTER TRANSFORM '+story.created);
});
console.log 显示我想要的日期格式,但 stories 数组中的 story.created 值未修改。重新格式化stories 数组中的created 属性的正确方法是什么(如果可能,我正在学习ES5,我发现它更容易理解发生了什么)?
编辑 - 显示 .map 和 .foreach 的查询和使用,这两个都没有修改“故事”
let stories = await Story.find({$or:[{'group': {$in:group}},
{'public':true} ]})
.populate('group')
.populate('createdBy');
console.log('BEFORE TRANSFORM '+stories);
// console.log(stories);
// stories.map(function(story){
// story.created = dateFormat(story.created, "dddd, mmmm dS, yyyy, h:MM:ss TT")
// console.log('AFTER TRANSFORM '+story.created);
// });
stories.forEach(story => {
story.created = dateFormat(story.created, "dddd, mmmm dS, yyyy, h:MM:ss TT")
});
console.log('AFTER TRANSFORM '+stories);
【问题讨论】:
-
.map期望return值 - 执行forEach-stories.forEach(function(story){ -
假设您没有将
stories.map的结果分配给变量,您在哪里以及如何检查stories中的值?创建一个最小且可重现的示例。 -
@tymeJV 我同意在这里使用
.forEach。但这并不能解释 OP 的问题。因为如果 OP 会执行stories = stories.map,那么stories将是一个仅包含undefined的数组,但 OP 表示值不变。如果 OP 真的写了stories.map而不将新数组分配给变量,那么stories.map和stories.forEach的结果将是相同的。 -
我同意@t.niese - 我猜 OP 有更多代码可能会影响我们没有看到的这一点。
标签: javascript arrays node.js express