如何将字符串数组推入模型?附代码实现疑问求助
解决方法:将字符串数组转换为带name字段的对象数组并关联到Band模型
我看你在把cds字符串数组关联到Band模型的cd字段时遇到了问题,主要是语法和逻辑上的小问题,我帮你修正并解释一下:
原代码的问题点
- 语法错误:
'cd': [ 'name' : this.cds.push(num) ]这行有两处问题:- 数组内部不能直接写键值对(应该是对象结构);
push()方法返回的是数组的新长度,不是你添加的元素,而且num变量也没有定义。
- 逻辑偏差:你需要把字符串数组里的每个元素转换成带
name字段的对象,而不是直接把原数组塞进去。
修正后的代码
假设你的cds是一个字符串数组(比如['摇滚精选', '现场专辑']),我们可以用Array.map()把它转换成符合要求的对象数组:
cds = []; addBand(name, genre) { console.log(name, genre); // 把字符串数组转换成每个元素都带name字段的对象数组 const cdObjects = this.cds.map(cdName => ({ name: cdName })); const band = new Band({ name, // ES6属性简写,等价于name: name genre, // 等价于genre: genre cd: cdObjects // 赋值转换后的对象数组 }); console.log('band', band); this.bandsService.addBand(band); }
如果需要先添加新CD到数组再关联
如果你是想先把新的CD名称加入cds数组,再创建Band对象,可以这样调整:
addBand(name, genre, newCdName) { console.log(name, genre); // 先将新CD名称添加到cds数组 this.cds.push(newCdName); // 转换为带name字段的对象数组 const cdObjects = this.cds.map(cdName => ({ name: cdName })); const band = new Band({ name, genre, cd: cdObjects }); console.log('band', band); this.bandsService.addBand(band); }
关键说明
Array.map()会遍历数组的每个元素,返回一个新数组,这里我们把每个字符串包装成{name: 字符串}的对象,刚好匹配Band模型中cd数组的对象结构要求;- ES6的属性简写可以让代码更简洁,当对象的键名和变量名相同时,直接写变量名即可(比如
name代替name: name)。
内容的提问来源于stack exchange,提问作者Jordy Huijgens
相关产品推荐
相关产品推荐

