使用filter方法后无法设置AirPassengerList的SeatPrice属性报错
问题解决:Cannot set properties of undefined (setting 'SeatPrice')
问题原因
你的代码中,postObject.AirPassengerList.filter(...)返回的数组为空,直接取[0]得到undefined,尝试给undefined设置SeatPrice属性就会抛出这个错误。本质是没有匹配到符合条件的乘客项。
解决方案
优化代码逻辑,增加存在性判断
用find替代filter(更高效,因为只找第一个匹配项),并先判断是否找到目标乘客再赋值:
const eventSeatSelectCallback = (SeatPrice, FlightNumber, SegmentKey) => { var postObject = { ...state.post }; postObject.IsSeatSelected = true; // 查找符合条件的第一个乘客 const targetPassenger = postObject.AirPassengerList.find( (x) => x.FlightNumber === FlightNumber.toString() && x.SegmentKey.toString() === SegmentKey.toString() && x.IsSelected === true ); // 确认找到乘客后再设置属性 if (targetPassenger) { targetPassenger.SeatPrice = SeatPrice; dispatch({ type: "UPDATE_SEATFORPASSENGER", payLoad: postObject }); } else { // 可选:处理未找到的情况,比如打日志 console.warn("未找到匹配的乘客记录"); } };
额外排查点
- 验证传入的
FlightNumber、SegmentKey与AirPassengerList中元素的类型是否一致(比如一个是数字、一个是字符串,会导致匹配失败)。 - 确认
AirPassengerList中确实存在IsSelected为true,且FlightNumber、SegmentKey与传入参数匹配的项。
内容的提问来源于stack exchange,提问作者Essa Mohammad
相关产品推荐
相关产品推荐

