jQuery如何向对象属性对应的数组中动态添加元素
错误原因
- 初始对象结构不符合要求:你当前给
unit、tm赋值用的是大括号{},属于对象类型,没有数组的push方法,这是代码报错的核心原因,数组需要用中括号[]定义。 - 给对象新增属性的语法错误:
objs本身是普通对象,不是数组,不能调用push方法,给对象新增属性直接使用objs[键名] = 值的语法即可。 push参数错误:objs[fot].push({val})会将包含val属性的对象推入数组,和你要直接存入值的需求不符,直接传入val即可。- 代码中多余的
??属于语法错误,需要删除。
修正后的代码
初始对象定义
var objs = { unit: ['x1', 'x2', 'x3'], tm: ['y1', 'y2', 'y3'] }
点击事件逻辑
$(document).on('click','.btn',function(){ var fot = $(this).attr('for') var val = $(this).attr('value') if (fot in objs) { // 已存在对应键,向数组追加值 objs[fot].push(val) } else { // 不存在对应键,新增属性并赋值为包含当前值的数组 objs[fot] = [val] } });
效果说明
点击btn1后,objs.unit会更新为['x1','x2','x3','val4'];点击btn2后,objs会新增dept属性,值为['xyz1'],和你的预期一致。
注:你预期示例中使用大括号
{}包裹列表属于概念混淆,JS中数组用中括号[]存储有序值列表,对象用大括号{}存储键值对,注意区分即可。
内容的提问来源于stack exchange,提问作者Chester
相关产品推荐
相关产品推荐

