javascript - 可以使用js对象解构但在分配给新对象之前修改一些值吗?
问题描述
我有以下代码从 api 接收电影数据。现在我想从返回的 json 文件中创建一个新对象,但只包含属性的子集,同时在将它们分配给新对象之前修改一些现有的属性值,我目前正在做这件事,但是有没有我可以使用javascript/typescript对象解构语法来实现这个结果吗?
我想使用一些现有的属性,例如title
并且overview
想更改poster_path
属性值(我在 if 语句后的前两行中设置了这些值)。我可以以更简洁/有效的方式实现相同的结果吗?
movieCollection.results.forEach(
(movie: {
poster_path: string,
backdrop_path: string,
title: string,
overview: string,
release_date: string,
vote_average: number,
vote_count: number,
genre_ids: number[],
}) => {
if (movie.backdrop_path) {
//create paths for pictures
let poster_path = this.secureBaseURL + this.posterSizes[4] + movie.poster_path;
let backdrop_path = this.secureBaseURL + this.posterSizes[5] + movie.backdrop_path;
//create array object
movieArray.push({
poster_path: poster_path,
backdrop_path: backdrop_path,
title: movie.title,
overview: movie.overview,
release_date: movie.release_date,
vote_average: movie.vote_average,
vote_count: movie.vote_count,
genre_ids: movie.genre_ids,
styles: {},
});
}
});
解决方案
我建议使用Spread 语法来有效地实现相同的结果。它允许在需要零个或多个键值对(对于对象字面量)的地方扩展对象表达式;这是新数组中的对象。
movieCollection.results.forEach(
(movie: {
poster_path: string,
backdrop_path: string,
title: string,
overview: string,
release_date: string,
vote_average: number,
vote_count: number,
genre_ids: number[],
}) => {
if (movie.backdrop_path) {
//create array object
movieArray.push({
...movie, // keep the unchanged properties
poster_path: this.secureBaseURL + this.posterSizes[4] + movie.poster_path,
backdrop_path: this.secureBaseURL + this.posterSizes[5] + movie.backdrop_path, // override these two properties as needed
styles: {},
});
}
});
但是,我注意到,您在这里要做的似乎是更改数组中的对象并将更新的结果保存在另一个数组中?然后实际上,您可以使用Array map更简洁地重构您的代码。
const movieArray = movieCollection.results
.filter((t) => !!t.backdrop_path) // filter by backdrop_path property
.map(
(movie) => ({
...movie, // keep the unchanged properties
poster_path: this.secureBaseURL + this.posterSizes[4] + movie.poster_path,
backdrop_path: this.secureBaseURL + this.posterSizes[5] + movie.backdrop_path,
styles: {},
}),
);
推荐阅读
- javascript - 如何将变量传递给参数(在函数中)?
- macos - 如何修复因 Catalina 上的程序崩溃而损坏的 Sketch 文件?
- c++ - 为什么 c++ 中类的大小取决于数据成员的公共/私有状态?
- java - 在main方法中从数组中的位置获取元素
- amazon-web-services - 当它在cloudwatch中多次找到相同的单词时,如何从Lambda多次发送SNS电子邮件?
- javascript - JavaScript:计算机猜我的数字游戏,不能重复猜错的数字
- python - 尽管满足条件但未调用函数(即字符串值符合预期)
- recursion - 递归 - 打印 uniq 子组
- sql - 选择昨天的日期时间和今天的日期和时间之间的所有行
- r - 数据框名称作为R中的变量