You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组填充时触发Uncaught TypeError: .push is not a function错误求助

问题排查与解决方案

我来帮你搞定这个报错!这个Uncaught TypeError: .push is not a function的问题根源其实很明确:你在循环内部把数组转换成了字符串,导致后续循环无法调用数组的push方法。

错误原因分析

咱们拆解一下代码执行流程:

  1. 初始时arrEmailID是一个空数组
  2. 第一次进入each循环:
    • 成功把处理后的_sidpush到数组里
    • 执行arrEmailID = arrEmailID.join(","),这行代码会把数组转换成一个逗号分隔的字符串(比如'user1@domain.com')
  3. 第二次进入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:58:13