JavaScript如何正确访问JSON数组中动态键对应的min属性值
问题根源拆解
你遇到的取值错误主要来自两个核心问题:
- 你的JSON是包含两个独立对象的数组,第一个对象仅存
Alpha配置,第二个对象仅存Beta配置,无法直接从data[0]或data根节点直接取到两个分类的配置 - 用
.操作符取动态属性名时,会把变量名当成固定的字面量键名,不会读取变量对应的实际值,动态键必须用[]语法读取
正确实现方案
推荐先把原数组整合成单个配置对象,后续取值不需要关心数组下标,逻辑更简洁:
var selectedUnit = $("#entry_field").val(); // 注意把用户输入的数量转成数字,避免字符串比较出错 var selectedValue = Number($("#你的数量输入框选择器").val()); $.getJSON("/json-url/", function(data) { // 数组合并为单个配置对象 const unitConfig = data.reduce((result, item) => Object.assign(result, item), {}); // 用[]语法读取动态键对应的min值,同时转成数字 const minLimit = Number(unitConfig[selectedUnit]?.min); // 先判断配置是否存在,再做比较 if (!isNaN(minLimit) && selectedValue < minLimit) { alert("You are below the minimum units"); } });
如果你不想做数组转换,也可以直接遍历查找对应分类:
$.getJSON("/json-url/", function(data) { // 遍历数组找到匹配的分类项 const target = data.find(item => item.hasOwnProperty(selectedUnit)); if (target) { const minLimit = Number(target[selectedUnit].min); if (selectedValue < minLimit) { alert("You are below the minimum units"); } } });
补充注意事项
- 你原JSON中的
min值是字符串类型,用户输入的数量默认也是字符串,直接比较会按字符编码排序,比如"10" < "2"会返回true,必须转成数字再做比较 - 动态属性名必须用
[]读取,比如obj[yourVariable],不能写obj.yourVariable,后者会把yourVariable当成固定的键名查找
内容的提问来源于stack exchange,提问作者kktestclearly
相关产品推荐
相关产品推荐

