修复代码时持续遇到「Expected an assignment or function call...」错误求助
解决「Expected an assignment or function call and instead saw an expression」错误
这个错误是因为代码检查工具(比如ESLint)禁止将三元运算符作为独立语句使用。三元运算符本质是表达式,它的结果需要被赋值、传递或使用,而你这里用它来执行条件赋值,false分支返回的null没有被处理,属于无意义的表达式语句,触发了规则校验。
另外注意你的代码里有两处小问题:函数名拼写错误constrcutFilterOptions(少了个u),以及常量TIMEFILTERUNIT末尾缺失分号,这些也建议一并修正。
下面是几种可行的修复方案:
方案一:替换为if语句(最直观易读)
const CHARTID = "chart_id"; const FIELDID = "field_id"; const TIMEFILTERVALUE= "time_filter_input"; const TIMEFILTERUNIT = "time_filter_type"; const UNITFILTER = "unit_filter"; const constructFilterOptions = (field_id, chartId, timeFilterType, timeFilterUnit, unit)=> { var filterObj = {}; if (!_.isNil(field_id)) filterObj[FIELDID] = field_id; if (!_.isNil(chartId)) filterObj[CHARTID] = chartId; if (!_.isNil(timeFilterType)) filterObj[TIMEFILTERUNIT] = timeFilterType; if (!_.isNil(timeFilterUnit)) filterObj[TIMEFILTERVALUE] = timeFilterUnit; if (!_.isNil(unit)) filterObj[UNITFILTER] = unit; return filterObj; }
方案二:ES6+对象字面量条件属性(更简洁)
利用展开运算符,仅当值非空时向对象添加对应属性:
const CHARTID = "chart_id"; const FIELDID = "field_id"; const TIMEFILTERVALUE= "time_filter_input"; const TIMEFILTERUNIT = "time_filter_type"; const UNITFILTER = "unit_filter"; const constructFilterOptions = (field_id, chartId, timeFilterType, timeFilterUnit, unit)=> { return { ...(!_.isNil(field_id) && { [FIELDID]: field_id }), ...(!_.isNil(chartId) && { [CHARTID]: chartId }), ...(!_.isNil(timeFilterType) && { [TIMEFILTERUNIT]: timeFilterType }), ...(!_.isNil(timeFilterUnit) && { [TIMEFILTERVALUE]: timeFilterUnit }), ...(!_.isNil(unit) && { [UNITFILTER]: unit }) }; }
方案三:强制使用三元运算符(不推荐,冗余)
如果一定要保留三元写法,需要将表达式结果赋值给变量(虽然完全没必要,但能通过检查):
const CHARTID = "chart_id"; const FIELDID = "field_id"; const TIMEFILTERVALUE= "time_filter_input"; const TIMEFILTERUNIT = "time_filter_type"; const UNITFILTER = "unit_filter"; const constructFilterOptions = (field_id, chartId, timeFilterType, timeFilterUnit, unit)=> { var filterObj = {}; let temp; temp = !_.isNil(field_id) ? filterObj[FIELDID] = field_id : null; temp = !_.isNil(chartId) ? filterObj[CHARTID] = chartId : null; temp = !_.isNil(timeFilterType) ? filterObj[TIMEFILTERUNIT] = timeFilterType : null; temp = !_.isNil(timeFilterUnit) ? filterObj[TIMEFILTERVALUE] = timeFilterUnit : null; temp = !_.isNil(unit) ? filterObj[UNITFILTER] = unit : null; return filterObj; }
内容的提问来源于stack exchange,提问作者Suraya Zulkifli
相关产品推荐
相关产品推荐

