jQuery使用indexOf匹配下拉框选中值筛选对象键返回空数组如何解决
错误原因
你代码的核心问题是逻辑方向错误:
ParentBrandKeys本身就是筛选后符合品牌要求的Brand对象的键名(比如Brand1-Parameter1-SubBrand1这类字符串),你需要判断的是这个键名字符串是否包含选中的Parameter,而不是去取Brand[key]的键。Brand[key]是存储SubBrand信息的数组,它的键是数字索引,自然检索不到Parameter相关内容,所以返回空数组。- 额外隐患:你把
#Parameter的change事件绑定在了#ParentBrand的change回调里,每次切换品牌都会重复绑定事件,会导致后续触发change时逻辑重复执行多次。
修正后的完整代码
jQuery(document).ready(function($) { var Brand = { "Brand1-Parameter1-SubBrand1": [{ "Image": "animal", "Heading": "SubBrand1", "Link": "SubBrand1" }], "Brand1-Parameter1-SubBrand2": [{ "Image": "animal", "Heading": "SubBrand2", "Link": "SubBrand2" }], "Brand1-Parameter2-SubBrand3": [{ "Image": "water", "Heading": "SubBrand3", "Link": "SubBrand3" }], "Brand1-Parameter2-SubBrand4": [{ "Image": "water", "Heading": "SubBrand4", "Link": "SubBrand4" }], "Brand2-Parameter1-SubBrand5": [{ "Image": "travel", "Heading": "SubBrand5", "Link": "SubBrand5" }], "Brand2-Parameter1-SubBrand6": [{ "Image": "travel", "Heading": "SubBrand6", "Link": "SubBrand6" }], "Brand2-Parameter2-SubBrand7": [{ "Image": "flower", "Heading": "SubBrand7", "Link": "SubBrand7" }], "Brand2-Parameter2-SubBrand8": [{ "Image": "flower", "Heading": "SubBrand8", "Link": "SubBrand8" }], } // 外层存储选中的品牌值,两个下拉框事件独立绑定避免重复绑定 let selectedBrand = '' $("#ParentBrand").on('change', function() { selectedBrand = $(this).val(); $("#Parameter").val(null).trigger('change'); }); $("#Parameter").on('change', function() { const selectedParam = $(this).val() if (!selectedBrand || !selectedParam) return // 直接筛选同时匹配品牌前缀、包含参数的键 const matchedKeys = Object.keys(Brand) .filter(key => key.startsWith(selectedBrand) && key.includes(selectedParam)) console.log('匹配的键:', matchedKeys) // 如果需要直接获取对应SubBrand数据,使用下方代码即可 const matchedSubBrands = matchedKeys.map(key => Brand[key][0]) console.log('匹配的SubBrand数据:', matchedSubBrands) }); });
内容的提问来源于stack exchange,提问作者Mithun Uchil
相关产品推荐
相关产品推荐

