TS/JS函数调用slice方法报逗号缺失解析错误如何解决
对象键处理函数调用slice后抛出「Parsing error: "," expected」报错排查
报错核心原因
触发解析错误的本质是违反了对象字面量的语法规则:
- ES6 简写属性仅支持单个变量标识符的写法,例如
{ value }等价于{ value: value },键名和变量名保持一致。 - 你在else分支中直接写
value.slice(3)属于运算表达式,不是合法的简写属性标识符。解析器读到value后碰到.操作符,会判定当前属性定义已结束,本该出现逗号分隔下一个属性,因此抛出「预期逗号」的解析错误。
其他隐藏问题
除了解析错误外,你的代码还存在两个会导致运行异常的问题:
- 内置对象拼写错误:
Objeckt.keys为笔误,正确写法是Object.keys - 逻辑不符合预期:当前reduce回调中写的
{ ...prevValue, value }会给返回对象添加固定键为value的属性,值是当前遍历到的键名字符串,既没有保留原对象的属性值,也没有实现键名裁剪的效果。如果需要用表达式计算结果作为对象键,必须使用[表达式]的计算属性格式,同时同步取出原对象对应键的值做映射。
修正后代码
假设你的需求是遍历对象所有键,将bo-开头的键去掉前缀后保留原有属性值,非前缀键原样保留,修正后的代码如下:
const getObjectKeys = (object: any) => { return Object.keys(object).reduce((prevValue, key) => { if (key.startsWith("bo-")) { return { ...prevValue, [key.slice(3)]: object[key] } } else { return { ...prevValue, [key]: object[key] } } }, {}) }
如果你的实际需求是返回处理后的键名数组而非新对象,只需要把reduce初始值改为空数组
[],回调里直接push处理后的key即可。
内容的提问来源于stack exchange,提问作者juzello
相关产品推荐
相关产品推荐

