我想映射一个数组,返回除.created
属性之外的相同数组,我正在从毫秒转换为日期对象。
const posts = data.map((post) => {
post.created = new Date(post.created); //milliseconds to Date Object
return post;
})
这个函数做了我期望的结果,但我不喜欢因为里面的函数不纯,正在改变对象。 如何用纯函数做同样的替代方法?
非常感谢你。
答案 0 :(得分:2)
您可以使用Object.assign
中的map
docs来实现此目的:
const posts = data.map((post) => {
return Object.assign({}, post, { created: new Date(post.created) });
})
这实质上克隆了原始post
,然后覆盖了created
属性。
答案 1 :(得分:1)
我会提供两种解决方案。
data.map(post => Object.assign({created: new Date(post.created)},post));
Object.assign
的第一个参数是target
对象。它也是Object.assign
返回的对象。
for(let post of data){
post.created = new Date(post.created);
}
当然,这种方法更快,成本更低,因为它不需要初始化一个新数组,然后它的对象就像另一个那样复制所有对象的属性。
选择权在你手中。只要确保你知道你在做什么。
答案 2 :(得分:1)
您可以复制而不复制旧对象的所有属性:
const posts = data.map((post) => {
const obj = Object.create(post);
obj.created = new Date(post.created); // shadow created with the new value
return obj;
});
在实践中,它使用JavaScript继承方案,以便新对象只有created
作为自己的属性,其余的继承自原始对象。