如何在jQuery的each()函数中使用变量作为对象属性键?
解决动态访问对象属性的问题
嘿,我完全懂你的困扰——刚接触的时候很容易在对象属性访问这里卡壳,其实这是JavaScript的基础知识点,跟jQuery关系不大哦!
问题出在哪?
你写的v.thekey并不是在使用thekey变量里的属性名,而是在直接访问对象v中名为thekey的属性(注意是字面量的字符串"thekey",不是你传入的参数值)。而v.wid能正常工作,是因为它直接指定了属性名为wid,是固定的字面量。
正确的写法:方括号语法
要动态使用变量作为属性名,你得用方括号语法,也就是v[thekey],而不是点语法。点语法只能用固定的属性名,方括号语法才支持变量、表达式这类动态的属性名。
修改后的完整函数
把你的函数里的v.thekey改成v[thekey],另外你里面硬编码的tkey = 'wid'其实没必要,直接用传入的thekey参数就行:
function countmeta(array, thekey, item) { var count = 0; $.each(array, function(i, v) { // 用方括号访问动态属性 if (v[thekey] == item) { count++; } }); return count; }
两种属性访问方式的区别
- 点语法(
v.wid):属性名必须是固定的字符串,而且得符合标识符规则(比如不能有空格、不能以数字开头) - 方括号语法(
v[thekey]):可以用变量、字符串甚至表达式来指定属性名,完美适配你这种需要动态传属性名的场景
举个调用例子:如果你的数组里有多个带wid属性的对象,想统计wid等于100的数量,直接这样调用就行:
var result = countmeta(yourArray, 'wid', 100);
另外,如果你之前想用tkey变量的话,比如var tkey = thekey;,那也要写成v[tkey],而不是v.tkey,这样就能正常工作啦。
内容的提问来源于stack exchange,提问作者clfr98ad
相关产品推荐
相关产品推荐

