数组填充时触发Uncaught TypeError: .push is not a function错误求助
问题排查与解决方案
我来帮你搞定这个报错!这个Uncaught TypeError: .push is not a function的问题根源其实很明确:你在循环内部把数组转换成了字符串,导致后续循环无法调用数组的push方法。
错误原因分析
咱们拆解一下代码执行流程:
- 初始时
arrEmailID是一个空数组 - 第一次进入
each循环:- 成功把处理后的
_sidpush到数组里 - 执行
arrEmailID = arrEmailID.join(","),这行代码会把数组转换成一个逗号分隔的字符串(比如'user1@domain.com')
- 成功把处理后的
- 第二次进入
each循环:- 此时
arrEmailID已经是字符串了,而字符串并没有push方法,所以直接触发TypeError
- 此时
修复后的代码
把join操作移到循环外部,等所有元素都添加到数组之后再转换为字符串:
const arrEmailID = []; const emailSpan = $(_PeoplePicker).find('.sp-peoplepicker-userSpan'); let _sid = ""; if (emailSpan.length > 0) { $(emailSpan).each(function() { _sid = $(this).attr('sid'); _sid = _sid.split("|")[2]; arrEmailID.push(`'${_sid}'`); // 用模板字符串更简洁 }); // 循环结束后再把数组转为字符串 const emailIdString = arrEmailID.join(","); // 这里可以使用emailIdString做后续操作 } else { alert("null"); }
额外优化建议
为了让代码更规范简洁,还可以做这些改进:
- 用
const/let代替var,避免全局变量污染 - 使用
map方法简化循环逻辑,更符合函数式编程风格:
const emailSpan = $(_PeoplePicker).find('.sp-peoplepicker-userSpan'); if (emailSpan.length > 0) { const emailIdString = emailSpan.map(function() { const sid = $(this).attr('sid').split("|")[2]; return `'${sid}'`; }).get().join(","); // 使用emailIdString } else { alert("null"); }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

