makeGuestList函数实现问题:未保留原对象其他属性导致断言失败
makeGuestList函数实现问题:未保留原对象其他属性导致断言失败
嘿,我一眼就看出问题所在啦——你的makeGuestList函数现在只返回了拆分后的firstName和lastName,完全丢掉了原对象里的其他属性,这就是断言失败的核心原因!
咱们拆解下问题:你当前的代码里,return语句直接创建了一个仅包含firstName和lastName的新对象,原对象里像age这类额外属性根本没被纳入进去。而测试用例的要求是保留原对象所有其他属性,仅把name替换成拆分后的两个属性,所以才会出现expected { firstName: 'Ada', …(1) } to deeply equal { firstName: 'Ada', …(3) }的错误——这里的…(1)表示你的返回结果只有1个额外属性,而测试期望有3个,差的就是原对象里没被保留的那些属性。
那怎么解决呢?咱们用ES6的对象解构和展开运算符就能轻松搞定,既完成name拆分,又完美保留其他所有属性:
function makeGuestList(person) { // 从原对象中解构出name,剩下的所有属性自动存入rest对象 const { name, ...rest } = person; // 拆分name字符串得到firstName和lastName const [firstName, lastName] = name.split(" "); // 合并rest里的原属性和新拆分出的属性,返回最终对象 return { ...rest, firstName, lastName }; }
咱们验证下修改后的效果:
- 调用
makeGuestList({ name: "Hannah Fry", age: 46 })时,会返回{ age: 46, firstName: "Hannah", lastName: "Fry" },完全符合测试预期; - 测试你自己的
const guest = { name: "Ada Lovelace" },返回的是{ firstName: 'Ada', lastName: 'Lovelace' },如果之后给guest添加其他属性比如age: 36,函数也会自动保留这个属性。
这样修改后,既完成了拆分name的需求,又完美保留了原对象的所有其他属性,断言自然就能通过啦!
备注:内容来源于stack exchange,提问作者Thomas Mckillen
相关产品推荐
相关产品推荐

