JS对象姓名拆分问题:输出无引号属性键的困惑
问题分析与解决
1. 代码里的实际逻辑bug
你当前代码存在一个明显问题:familyName 会包含开头的空格。
因为oldName.slice(indexOfSpace)是从空格的索引位置开始截取,比如原name是"Bob Jones",indexOfSpace是3,slice(3)得到的是" Jones"(前面带空格),这不符合预期。需要改成:
let familyName = oldName.slice(indexOfSpace + 1);
这样就能得到不带前置空格的纯粹姓氏字符串。
2. 控制台输出键带引号的问题
控制台输出对象时键带引号,是控制台自身的格式化行为,不是你的代码有问题。
JavaScript中,当对象的键是合法标识符(比如firstName、lastName这种符合变量命名规则的键),定义时可以不用引号,但控制台为了统一显示格式,有时会给所有键加上引号。你通过person.firstName = givenName添加的属性,本身就是不带引号的标识符属性,完全符合作业平台的要求——平台要的是对象结构正确,而非控制台的显示格式。
修正后的完整代码
function makeGuestList(person) { let oldName = person.name; let indexOfSpace = oldName.indexOf(" "); let givenName = oldName.slice(0, indexOfSpace); let familyName = oldName.slice(indexOfSpace + 1); // 移除姓氏前的空格 person.firstName = givenName; person.lastName = familyName; delete person.name; console.log(person); // 建议return person,方便后续逻辑复用 // return person; }
内容的提问来源于stack exchange,提问作者Michal Szarka
相关产品推荐
相关产品推荐

