如何用find()遍历对象数组,按输入数值区间匹配对应里程对象
解决方案
我来帮你完善这个里程匹配函数!根据你的需求,我们可以通过区间判断对应到state['1'].extras.mileage数组里的目标对象,同时注意处理JavaScript/TypeScript中数字键名的访问规范。
完整实现代码
export const getMileageName = (state: GlobalState, inputMileage: number) => { // 注意:对象键名为纯数字时,不能用点语法state.1,必须用括号访问state['1'] const mileageOptions = state['1'].extras.mileage; // 按区间匹配对应的里程对象 if (inputMileage <= 1000) { // 匹配1-1000区间(包含1000) return mileageOptions[0]; } else if (inputMileage <= 2000) { // 匹配1001-2000区间(包含2000) return mileageOptions[1]; } else if (inputMileage <= 3000) { // 匹配2001-3000区间(包含3000) return mileageOptions[2]; } // 处理超出1-3000范围的输入,可根据业务调整返回值 return { name: 'Unknown mileage', mileage: '0', description: 'No matching mileage range' }; };
关键细节说明
- 数字键名访问:因为
state里的属性是1(纯数字),所以必须用state['1']来访问,不能用state.1——这是JS/TS的语法规则,点语法只支持合法标识符(不能以数字开头)。 - 区间边界调整:如果你的需求里
1000属于第二个区间、2000属于第三个区间,只需要把判断条件改成:if (inputMileage < 1000) { ... } else if (inputMileage < 2000) { ... } else if (inputMileage <= 3000) { ... } - 动态生成对象(可选):如果
mileageOptions数组里的对象只存了里程数值,需要你动态拼接name和description,可以改成这样:export const getMileageName = (state: GlobalState, inputMileage: number) => { const mileageOptions = state['1'].extras.mileage; if (inputMileage <= 1000) { const mileage = mileageOptions[0].mileage; return { name: `${mileage} mileage`, mileage, description: 'mileage-description' }; } else if (inputMileage <= 2000) { const mileage = mileageOptions[1].mileage; return { name: `${mileage} mileage`, mileage, description: 'mileage-description' }; } else if (inputMileage <= 3000) { const mileage = mileageOptions[2].mileage; return { name: `${mileage} mileage`, mileage, description: 'mileage-description' }; } return { name: 'Unknown mileage', mileage: '0', description: 'No matching mileage range' }; };
内容的提问来源于stack exchange,提问作者user8759797
相关产品推荐
相关产品推荐

