如何提取下拉选择框的选项文本与缩短后的选项值并组织为指定键值结构?
如何提取下拉选择框的选项文本与缩短后的选项值为键值对对象?
我来帮你搞定这个问题~你当前的核心问题是用了数组来存储结果,但我们需要的是键值对结构的对象,数组的push方法只能生成顺序列表,没法实现文本与值的映射关系。下面是修正后的完整方案:
修正后的代码
<select id="test"> <option value="item/objectcomponents/head/helm_leather_b_06_bef.m2">Object1</option> <option value="item/objectcomponents/head/helm_leather_b_06_bem.m2">Object2</option> <option value="item/objectcomponents/head/helm_leather_b_02_bem.m2">Object3</option> </select> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> const assets = {}; // 用对象而非数组存储键值对 $('#test option').each(function() { // 提取value中的文件名:用split('/').pop()直接取路径最后一段,适配任意层级路径 const fullPath = $(this).val(); const fileName = fullPath.split('/').pop(); // 获取选项文本作为对象的键 const optionText = $(this).text(); // 给对象添加键值对 assets[optionText] = fileName; }); console.log(assets); // 输出结果完全符合你的预期: // { // "Object1": "helm_leather_b_06_bef.m2", // "Object2": "helm_leather_b_06_bem.m2", // "Object3": "helm_leather_b_02_bem.m2" // } </script>
关键优化点说明
- 替换数组为对象:数组是有序集合,而我们需要的是“选项文本→文件名”的映射关系,对象(Object)才是存储键值对的正确结构。
- 简化文件名提取逻辑:你之前用两次
split的方式依赖固定路径层级,一旦路径结构变化就会失效。用split('/').pop()可以直接截取路径的最后一段,不管前面有多少层级,通用性更强。 - 正确的键值对赋值:通过
assets[optionText] = fileName的写法,把选项文本作为对象的键,文件名作为对应的值,完美生成你想要的结构。
内容的提问来源于stack exchange,提问作者Berstos
相关产品推荐
相关产品推荐

