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

JavaScript遍历数组仅保留单索引值时pop()报错如何解决

问题根因

报错 未捕获类型错误:available.pop 不是一个函数 的核心原因有两个:

  • 你对数据结构的判断错误:你以为availables是二维数组,但从你贴的打印结果看,它是对象构成的数组,每个元素是{id: "", date: "", isAvailable: "", price: ""}格式的普通键值对对象,不是数组,自然没有数组专属的.pop()方法。
  • .pop()方法本身用法错误:数组的.pop()方法不接收任何参数,作用固定是删除数组的最后一个元素并返回该元素,根本不支持传入索引指定删除位置,你写.pop(2)本身就是不符合API设计的用法。
修正代码

你提到需求是“移除其余字段,仅保留单个索引/属性对应的值”,结合easepicker预订日历的使用场景,你大概率是需要提取可预订的日期值,直接用Array.map()做结构转换即可,不需要循环做删除操作:

$.ajax({
  url     : 'get_data.php', // 从接口拉取存在数据库的第三方预订数据
  type    : 'GET',
  success : checkAvail,
});


function checkAvail(response) {
  // 移除冗余的重复变量声明,原代码先给全局results赋值又声明局部results是不规范写法
  const results = jQuery.parseJSON(response);
  const availables = results.filter(a => a.isAvailable === '1');

  console.log(availables);

  // 提取需要的字段,比如如果只需要给日历传日期字符串,直接取date属性即可
  const availableDateList = availables.map(item => item.date);
  // 如果需要保留对象结构、仅删掉多余属性,就返回重组后的对象即可,比如只留日期和价格
  // const availableDateList = availables.map(item => ({
  //   date: item.date,
  //   price: item.price
  // }))

  console.table(availableDateList);
  // 后续把处理好的availableDateList传入easepicker做可选日期配置即可
}
额外注意事项
  • 声明变量一定要加let/const,原代码里results、availables都没加变量声明关键字,会直接挂载到全局作用域,很容易引发变量污染导致的异常
  • 操作数据前先确认数据类型:判断一个值是不是数组可以用Array.isArray(待检测值),不要靠主观预判结构
  • 如果真的需要删除数组指定位置的元素,要用.splice(起始索引, 删除元素个数),比如删除数组索引为2的元素写法是arr.splice(2, 1),注意这个方法同样只对数组生效,不能用在普通对象上

内容的提问来源于stack exchange,提问作者avia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:09