JavaScript : typeerror not a function

标签 javascript

我有一段代码,用于更新表示音乐专辑集合的 json 对象中的记录。此处编写的函数更新给定专辑 ID、属性(“tracks”)和值(“albumName”)的记录

我得到的错误如下:

"message": "Uncaught TypeError: collection[id][prop].push is not a function",

    var collection = {
        "2548": {
          "album": "Slippery When Wet",
          "artist": "Bon Jovi",
          "tracks": [ 
            "Let It Rock", 
            "You Give Love a Bad Name" 
          ]
        },
        "2468": {
          "album": "1999",
          "artist": "Prince",
          "tracks": [ 
            "1999", 
            "Little Red Corvette" 
          ]
        },
        "1245": {
          "artist": "Robert Palmer",
          "tracks": [ ]
        },
        "5439": {
          "album": "ABBA Gold"
        }
    };
    
    // Only change code below this line
    function updateRecords(id, prop, value) {
      if(!value){
        delete collection[id][prop];
        return collection;
      }
      if(prop === "tracks"){
        if(!collection[id].hasOwnProperty('tracks')){
          collection[id].tracks="";
        }
        if(value){
          collection[id][prop].push(value);
        }
      } else {
        collection[id][prop] = value;
      }
    
      return collection;
    }
    
    updateRecords(5439, "tracks", "Take a Chance on Me");

其他一些测试用例场景

enter image description here

最佳答案

+1 用于提供重现问题的工作示例。

问题出在 collection[id].tracks="" 行上,它应该是 collection[id].tracks=[]

请参阅下面更新的示例:

var collection = {
        "2548": {
          "album": "Slippery When Wet",
          "artist": "Bon Jovi",
          "tracks": [ 
            "Let It Rock", 
            "You Give Love a Bad Name" 
          ]
        },
        "2468": {
          "album": "1999",
          "artist": "Prince",
          "tracks": [ 
            "1999", 
            "Little Red Corvette" 
          ]
        },
        "1245": {
          "artist": "Robert Palmer",
          "tracks": [ ]
        },
        "5439": {
          "album": "ABBA Gold"
        }
    };
    
    // Only change code below this line
    function updateRecords(id, prop, value) {
      if(!value){
        delete collection[id][prop];
        return collection;
      }
      if(prop === "tracks"){
        if(!collection[id].hasOwnProperty('tracks')){
          collection[id].tracks=[];
        }
        if(value){
          collection[id][prop].push(value);
        }
      } else {
        collection[id][prop] = value;
      }
    
      return collection;
    }
    
    updateRecords(5439, "tracks", "Take a Chance on Me");
    
    console.log(collection[5439])

关于JavaScript : typeerror not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48919511/

相关文章:

JavaScript 动画动态返回元素上的位置

javascript - Angular Directive(指令)和范围问题

php - imagecreatefromstring 问题与从 javascript 传递的字符串

javascript - 浅渲染组件和 scryRenderedComponentsWithType

javascript - 如何从 Firefox 扩展覆盖 JavaScript 函数?

javascript - ObservableArray.RemoveAll() 清空不同变量中的串联对象

javascript - 最大宽度/高度 Canvas 滚动条干扰?

php - 使用javascript转换日期格式

javascript - 使用 jQuery 单击链接

javascript - 使用纯 javascript 查找和删除特定元素