我在我的ES6代码的各种实例中使用了解构,但今天我尝试缩短模型实例声明,但它在节点中并不完全正常。基本上,我从YouTube Data API中提取数据并将其存储在MongoDB实例中。因此,我从响应的缩略图部分创建了一个对象,如下所示:
thumbnailData = {
smallWidth: element.snippet.thumbnails.default.width,
smallHeight: element.snippet.thumbnails.default.height,
smallURL: element.snippet.thumbnails.default.url,
medWidth: element.snippet.thumbnails.medium.width,
medHeight: element.snippet.thumbnails.medium.height,
medURL: element.snippet.thumbnails.medium.url,
highWidth: element.snippet.thumbnails.high.width,
highHight: element.snippet.thumbnails.high.height,
highURL: element.snippet.thumbnails.high.url
}
我有一个像这样的Mongoose架构:
const ThumbnailSchema = new Schema({
smallWidth: Number,
smallHeight: Number,
smallURL: String,
medWidth: Number,
medHeight: Number,
medURL: String,
highWidth: Number,
highHight: Number,
highURL: String
});
const Thumbnail = mongoose.model('thumbnail', ThumbnailSchema);
所以我试图在我的宣言中做这样的事情:
let thumbs = new Thumbnail;
({ thumbs.smallWidth, thumbs.smallHeight, thumbs.smallURL } = thumbnailData);
但是node.js会抛出一个简单的“Unexpect令牌”。以上我的使用。在左侧。想法,如果这是可能的?这只是让我必须以如此长的形式写出对象,但是如果需要的话,我可以保留它,因为它确实有效。它看起来很像下面的语法,所以不确定区别是什么,谢谢。
var a, b;
({ a, b } = {a: 1, b: 2});
答案 0 :(得分:0)
您的代码
({ thumbs.smallWidth, thumbs.smallHeight, thumbs.smallURL } = thumbnailData);
不起作用。因为Js解释器不期望左手中的标记.
被视为属性访问。为了使它工作,你可以使用
({ a: thumbs.smallWidth, b:thumbs.smallHeight, c:thumbs.smallURL } = thumbnailData);
这会将值分配给新对象。这是一个工作片段:
var data = {a: "a", b: "b"};
( {a: data.a, b: data.b} = {a: 1, b : 2})
console.log(data.a)

答案 1 :(得分:0)
Object.assign(thumbs, (({ smallWidth, smallHeight, smallURL}) => ({smallWidth, smallHeight, smallURL}))(thumbnailData));
使用参数解构的小型IIFE可行。或旧时尚:
for(var key of ["smallWidth", "smallHeight", "smallURL"])
thumbs[key] = thumbnailData[key];
答案 2 :(得分:0)
你无法以这种方式对对象进行解构,Javascript将这些点识别为属性访问,就像@Bergi所评论的那样。但是,最小化重复的一种方法是将medium
,high
,thumbnails
从const { 'default': dflt, medium, high } = element.snippet.thumbnails;
let thumbs = new Thumbnail({
smallWidth: dflt.width,
smallHeight: dflt.height,
smallURL: dflt.url,
medWidth: medium.width,
medHeight: medium.height,
medURL: medium.url,
highWidth: high.width,
highHight: high.height,
highURL: high.url
});
属性中解构出来:
{{1}}