JavaScript记录集合

如题:
给定一个对象,用来表示部分音乐专辑收藏。 每张专辑都有几个属性和一个唯一的 id 号作为键值。 并非所有专辑都有完整的信息。

updateRecords 函数开始,这个函数需要一个对象 records ,包含一个音乐专辑集合,一个 id ,一个 prop (如 artisttracks ),和一个 value 。 使用下面的规则完成函数来修改传递给函数的对象。

  • 函数必须始终返回整个音乐专辑集合对象。
  • 如果 prop 不是 tracks 并且 value 不是一个空字符串, 将相册的 prop 更新或设置为 value
  • 如果 proptracks 但专辑没有 tracks 属性,则应创建空数组并为其添加 value
  • 如果 proptracks 并且 value 不是一个空字符串,将 value 添加到相册现有 tracks 数组的末尾。
  • 如果 value 是空字符串,从专辑里删除指定的 prop

解法:
function updateRecords(records, id, prop, value) {
if(value === “”){
delete records[id][prop];
}else{
if(prop !== “tracks”){
records[id][prop] = value;
}else {
if(records[id].hasOwnProperty(“tracks”)){
records[id][prop].push(value);
}else {
records[id][prop] = [];
records[id][prop].push(value);
}
}
return records;
}
}

逻辑:
首先将字符串是否为空进行判断,字符串为空则进行删除指定prop;其次对prop是否为"tracks"进行判断,prop不为"tracks"则将value 的值赋给指定prop;若prop为"tracks"则进一步对指定对象的属性进行判断,若存在"prop"属性,则直接追加到"tracks"数组末尾,否则新建数组并追加value。

image

文字中的代码块,可以点击这个按钮,从网页复制代码,粘贴在这里,格式就不会乱,例如:

// 设置
var collection = {
2548: {
  albumTitle: 'Slippery When Wet',
  artist: 'Bon Jovi',
  tracks: ['Let It Rock', 'You Give Love a Bad Name']
},
2468: {
  albumTitle: '1999',
  artist: 'Prince',
  tracks: ['1999', 'Little Red Corvette']
},
1245: {
  artist: 'Robert Palmer',
  tracks: []
},
5439: {
  albumTitle: 'ABBA Gold'
}
};

// 只修改这一行下面的代码
function updateRecords(object, id, prop, value) {
if(prop!=='tracks' &&value!==null){
  object[id][prop]=value;
}else if(prop==='tracks'&&!object[id].hasOwnProperty('tracks'){
  object[id].tracks = [value];
}else if(prop === 'tracks' && value!==null){
  object[id].tracks.push(value);
}else if(value===null){
  delete object[id][prop];
}
return object;
}


updateRecords(collection, 5439, 'artist', 'ABBA');

感谢指教:pray: