如何在JavaScript的filter函数中使用变量作为对象的键名
正确实现方式
你需要修改两处逻辑:
- 修正
currentMode的作用域问题:原代码中currentMode在if/else块内用const声明,属于块级作用域,外部的filter函数无法访问,需要将变量声明提到块外部。 - 使用方括号
[]语法实现动态属性访问:JS中如果要使用变量作为对象的键名,不能用点运算符+花括号的写法,要改用方括号包裹变量。
完整可运行代码
// 示例对象数组 const data = [{"itemID": 11, "Complete": true, "Started": true},{"itemID": 16, "Complete": false, "Started": false}]; // 相关变量 var possible_ItemID = 16; let isStartMode = false; // 可根据实际需求修改该值切换模式 // 修正currentMode作用域 let currentMode; if(isStartMode){ currentMode = 'Started' } else { currentMode = 'Complete' } // 修正filter的动态属性判断逻辑 const lineItem = data.filter((item) => item.itemID === possible_ItemID && item[currentMode] !== true) console.log(lineItem)
语法说明
JS访问对象属性支持两种语法:
- 点运算符:仅支持传入固定的属性名字面量,如
item.Started直接访问Started属性 - 方括号运算符:支持传入变量、表达式,运行时会自动将内部内容转为字符串作为属性名访问,刚好满足动态切换键名的需求
内容的提问来源于stack exchange,提问作者Ben in CA
相关产品推荐
相关产品推荐

