Javascript:typeerror不是函数

Javascript:typeerror不是函数,javascript,Javascript,我有一段代码,用于更新表示音乐专辑集合的json对象中的记录。这里编写的函数更新给定唱片集ID、属性(“曲目”)和值(“唱片集名称”)的记录 下面我得到的错误是: “消息”:“未捕获类型错误:集合[id][prop]。推送不是函数” var集合={ "2548": { “专辑”:“湿滑”, “艺术家”:“Bon Jovi”, “轨道”:[ “让它摇滚”, “你给了爱一个坏名声” ] }, "2468": { “专辑”:“1999”, “艺术家”:“王子”, “轨道”:[ "1999", “小

我有一段代码,用于更新表示音乐专辑集合的json对象中的记录。这里编写的函数更新给定唱片集ID、属性(“曲目”)和值(“唱片集名称”)的记录

下面我得到的错误是:

“消息”:“未捕获类型错误:集合[id][prop]。推送不是函数”

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]
},
"1245": {
“艺术家”:“罗伯特·帕默”,
“轨道”:[]
},
"5439": {
“专辑”:“阿巴黄金”
}
};
//仅更改此行下方的代码
函数更新记录(id、属性、值){
如果(!值){
删除集合[id][prop];
回收;
}
如果(道具==“轨迹”){
如果(!集合[id].hasOwnProperty('tracks')){
集合[id]。轨道=”;
}
如果(值){
集合[id][prop].push(值);
}
}否则{
集合[id][prop]=值;
}
回收;
}

更新记录(5439,“跟踪”,“给我一个机会”)
该部分中
id
prop
的简单日志显示
id=5439
prop=tracks
并且
id
5439
的对象没有
tracks
属性。因此,
collection[id][prop]
正在返回
undefined
,并且
undefined
没有
push
方法

解决方案是测试
tracks
属性是否存在,如果不存在,则创建它

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]
},
"1245": {
“艺术家”:“罗伯特·帕默”,
“轨道”:[]
},
"5439": {
“专辑”:“阿巴黄金”
}
};
//仅更改此行下方的代码
函数更新记录(id、属性、值){
如果(!值){
删除集合[id][prop];
回收;
}
如果(道具==“轨迹”){
如果(!集合[id].hasOwnProperty('tracks')){
集合[id]。轨道=”;
}
如果(值){
//如果该属性不存在。。。
如果(!集合[id][prop]){
//创建它并将其初始化为空数组
集合[id][prop]=[];
}
//现在,将新值推送到数组中是安全的
集合[id][prop].push(值);

console.log(collection[id]);//该部分中
id
prop
的简单日志显示
id=5439
prop=tracks
并且
id
5439
的对象没有
tracks
属性。因此,
collection[id][prop
正在返回
undefined
,并且
undefined
没有
push
方法

解决方案是测试
tracks
属性是否存在,如果不存在,则创建它

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]
},
"1245": {
“艺术家”:“罗伯特·帕默”,
“轨道”:[]
},
"5439": {
“专辑”:“阿巴黄金”
}
};
//仅更改此行下方的代码
函数更新记录(id、属性、值){
如果(!值){
删除集合[id][prop];
回收;
}
如果(道具==“轨迹”){
如果(!集合[id].hasOwnProperty('tracks')){
集合[id]。轨道=”;
}
如果(值){
//如果该属性不存在。。。
如果(!集合[id][prop]){
//创建它并将其初始化为空数组
集合[id][prop]=[];
}
//现在,将新值推送到数组中是安全的
集合[id][prop].push(值);

console.log(collection[id]);//.push是数组对象的函数。但是,您正在字符串上使用它。您需要将其初始化为数组而不是字符串

if(!collection[id].hasOwnProperty('tracks')){
      collection[id].tracks=[];
    }

.push是数组对象的函数。但是,您正在字符串上使用它。您需要将其初始化为数组而不是字符串

if(!collection[id].hasOwnProperty('tracks')){
      collection[id].tracks=[];
    }

+1用于提供工作样本以复制问题

问题在于行
集合[id]。tracks=“”
应该是
集合[id]。tracks=[]

请参见下面更新的示例:

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]