这道题实在太拗口,看了几个博主才看明白题目的意思,记录下来。
题目描述:
给定一个对象,用来表示部分音乐专辑收藏。 每张专辑都有几个属性和一个唯一的 id 号作为键值。 并非所有专辑都有完整的信息。
以?updateRecords ?函数开始,这个函数需要一个对象?records ,包含一个音乐专辑集合,一个?id ,一个?prop (如?artist ?或?tracks ),和一个?value 。 使用下面的规则完成函数来修改传递给函数的对象。
规则描述:
- 函数必须始终返回整个音乐专辑集合对象。
- 如果?
prop ?不是?tracks ?并且?value ?不是一个空字符串, 将相册的?prop ?更新或设置为?value 。 - 如果?
prop ?是?tracks ?但专辑没有?tracks ?属性,则应创建空数组并为其添加?value 。 - 如果?
prop ?是?tracks ?并且?value ?不是一个空字符串,将?value ?添加到相册现有?tracks ?数组的末尾。 - 如果?
value ?是空字符串,从专辑里删除指定的?prop 。
注意:?用?recordCollection ?对象做为测试参数对象。
测试要求:
序号 | 测试用例 | 结果 |
---|
1 | ?updateRecords(recordCollection, 5439, "artist", "ABBA") ? | artist ?的值应该是字符串?ABBA | 2 | updateRecords(recordCollection, 5439, "tracks", "Take a Chance on Me") | tracks ?的最后一个元素应该为字符串?Take a Chance on Me | 3 | updateRecords(recordCollection, 2548, "artist", "") | artist ?不应被设置为任何值 | 4 | ?updateRecords(recordCollection, 1245, "tracks", "Addicted to Love") ? | tracks ?的最后一个元素应该为字符串?Addicted to Love | 5 | updateRecords(recordCollection, 2468, "tracks", "Free") ? | tracks ?的第一个元素应该为字符串?1999 | 6 | updateRecords(recordCollection, 2548, "tracks", "") | tracks ?不应被设置为任何值 | 7 | ?updateRecords(recordCollection, 1245, "albumTitle", "Riptide") ? | albumTitle ?的值应该是字符串?Riptide |
解决方案:
// 初始内容
var recordCollection = {
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'
}
};
// 只修改这一行下面的代码
// 先判断value是否为空值,否则太麻烦,每一步都要判断是否为空
// 注意比较prop是否为tracks时,比较的tracks为字符串
// 注意recordCollection名字,updateRecords函数中传入的参数为records
// 编写时注意测试用例要求,每一个用例都必须满足
function updateRecords(records, id, prop, value) {
if(value=='') {
delete records[id][prop];
} else if (prop!="tracks"){
records[id][prop]=value;
} else if (prop=='tracks') {
if(!records[id].hasOwnProperty('tracks')) {
records[id][prop] = [];
}
// 这一步必须写在上面if的外层,否则当tracks不为空时,会重置内容,测试用例要求不改变内容
records[id][prop].push(value);
}
return records;
}
updateRecords(recordCollection, 5439, 'artist', 'ABBA');
|