从JSON访问记录并添加或删除信息

时间:2016-04-24 20:17:56

标签: javascript json

我是Javascript的新手,所以这可能相当容易。 我有这个JSON: var collection = {     2548:{       专辑:" Slippery When Wet",       艺术家:" Bon Jovi",       曲目:[         "让它摇滚",         "你给爱一个坏名字"       ]     },     2468:{       专辑:" 1999",       艺术家:" Prince",       曲目:[         " 1999&#34 ;,         "小红色克尔维特"       ]     },     1245:{       艺术家:" Robert Palmer",       曲目:[]     },     5439:{       专辑:" ABBA Gold"     } }; 而这个功能: //保留集合的副本以进行测试 var collectionCopy = JSON.parse(JSON.stringify(collection)); function updateRecords(id,prop,value){   if(value!==""&& prop!==" tracks"){     return collection.id.prop.value;   } else if(value!==""&& prop ===" tracks"){     return collection.id.prop.push(value);   } else {     delete collection.id.prop.value;   }   回收; } 这些是我的测试:   updateRecords(5439," artist"," ABBA");      updateRecords(2548," artist","");      updateRecords(1245," track","沉迷于爱");      updateRecords(2458," track",""); 我需要做的是编写一个函数来访问JSON信息,如果参数值是非空的,则添加信息(值!==""),prop参数不是曲目(道具! ==" track)更新或设置参数prop的值。 此外,如果参数prop是track(props ===" tracks")并且参数值也是非空白的(值!=="")我需要推送值到JSON文件内部轨道的末尾。 我的问题是我怎么能这样做?我明显失败了,我明白我需要删除并推送信息,但访问正确的数据让我感到困惑,我会做一些事情:return collection.id.prop.push(value);?

2 个答案:

答案 0 :(得分:1)

请注意,您使用的代码collection.id.prop.value。这意味着它不会在点之后解析变量,因为a.b is equivalent to a["b"]

这意味着您正试图在id上访问名为collection的礼仪,依此类推。

您应该使用collections[id][prop].value

var collectionCopy = JSON.parse(JSON.stringify(collection));

function updateRecords(id, prop, value) {
  if (value !== "" && prop !== "tracks"){
    return collection[id][prop].value;
  } else if (value !== "" && prop === "tracks"){
    return collection[id][prop].push(value);
  } else {
    delete collection[id][prop].value;
  }

  return collection;
}

答案 1 :(得分:0)

您应该使用点表示法来访问没有空格和括号表示法的元素。既然你不知道" prop"这里是否包含空格,最好只使用括号表示法。

如果您有任何问题,请与我们联系。

鉴于以下数据:

// Setup
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"
    }
};

// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));

// Only change code below this line
function updateRecords(id, prop, value) {
  if((value !== "") && (prop !== "tracks")) {
    console.log("Updating or setting property: ", prop);
    console.log("setting property to: ", value);
    collection[id][prop] = value;
  }
  else if((value !== "") && (prop === "tracks")) {
    collection[id].tracks.push(value);
  }
  else if(value === "") {
    delete collection[id][prop];
  }

  return collection;
}

updateRecords(5439, "artist", "ABBA");