我正在尝试创建一个对象以在 HTML 的各个地方使用。它有点像这样:
MovieInfo = {
title: Movie.value[0].title,
meta: [
{
name: "description",
content: Movie.value[0].description,
},
{
name: "date",
content: Movie.value[0].releasedate
},
// Try to add objects from another array
Movie.value[1].forEach(function (Cast, index) {
return {
key: Cast.actorname, property: "article:tag", content: Cast.actorname
}
})
]
}
以上方法无效。但是,如果我在创建 push
对象后 meta
到 MovieInfo
数组,那么它确实可以工作,如下所示:
MovieInfo = {
title: Movie.value[0].title,
meta: [
{
name: "description",
content: Movie.value[0].description,
},
{
name: "date",
content: Movie.value[0].releasedate
},
]
}
// Try to add objects from another array
Movie.value[1].forEach(function (Cast, index) {
MovieInfo.meta.push({
key: Cast.actorname, property: "article:tag", content: Cast.actorname
})
})
我必须在不同的区域做很多这样的循环,所以我更喜欢在创建 MovieInfo
时完成它们而不是在它之外完成。那可能吗?也就是说,是否可以通过在对象创建本身内部设置循环来使我的第一次尝试成功?
答案 0 :(得分:2)
您可以使用 IIFE 在对象字面量(或实际上,任何表达式)中执行任意操作:
const MovieInfo = {
title: Movie.value[0].title,
meta: (() => {
const meta = [
{
name: "description",
content: Movie.value[0].description,
},
{
name: "date",
content: Movie.value[0].releasedate
},
];
for (const cast of Movie.value[1]) {
meta.push({
key: cast.actorname,
property: "article:tag",
content: cast.actorname
});
}
return meta;
})(),
};
在这种情况下,我建议您使用 concat
和 map
简单地构建数组:
const MovieInfo = {
title: Movie.value[0].title,
meta: [
{
name: "description",
content: Movie.value[0].description,
},
{
name: "date",
content: Movie.value[0].releasedate
},
].concat(Movie.value[1].map(cast => ({
key: cast.actorname,
property: "article:tag",
content: cast.actorname
}))),
};