jQuery .each()遍历数组异常:仅输出首个元素求助
解决$.each遍历数组只输出第一个元素的问题
嘿,我来帮你揪出这个问题的根源!你提到数组长度是2,但$.each只遍历第一个元素,大概率是你的customerChosenMarkers不是标准的JavaScript数组,或者遍历过程被意外中断了,咱们一步步排查:
1. 先确认你的"数组"到底是什么类型
你给出的数组写法0:{...} 1:{...}更像对象字面量的格式,而非标准数组。先在遍历前加一行代码,确认它的真实身份:
console.log("类型:", typeof customerChosenMarkers, "是否为数组:", Array.isArray(customerChosenMarkers)); console.log("数组长度:", customerChosenMarkers.length, "完整内容:", customerChosenMarkers);
如果输出是类型: object 是否为数组: false,那它其实是个类数组对象或者普通对象,而非真正的数组。
2. 针对不同情况的解决方案
情况一:它是普通对象而非数组
如果你的customerChosenMarkers是这样定义的(注意用了大括号{}而非方括号[]):
const customerChosenMarkers = { 0: {location_name: "none", mid: "none", lat: "", lng: ""}, 1: {location_name: "1 Helena St, Burnley BB10 4AP, UK", mid: 0, lat: "53.78812", lng: "-2.231830"} };
$.each虽然能遍历对象,但如果对象存在其他不可枚举属性,或者遍历逻辑被干扰,可能会出现异常。建议先把它转成标准数组:
// 转成数组的两种方式 const markerArray = Object.values(customerChosenMarkers); // 或者 const markerArray = Array.from(Object.values(customerChosenMarkers)); // 再遍历数组 $.each(markerArray, function(index, tag) { console.log("LOOP ", index); });
情况二:它是类数组对象(比如DOM集合、API返回的类数组结构)
如果它是类数组(有length属性但不是数组),可以用Array.from或者slice转成真正的数组:
const markerArray = Array.from(customerChosenMarkers); // 或者兼容旧浏览器的写法 const markerArray = [].slice.call(customerChosenMarkers); $.each(markerArray, function(index, tag) { console.log("LOOP ", index); });
情况三:遍历过程被意外终止
检查你的实际遍历代码中,有没有在第一个元素的处理里写了return false——因为在$.each中,return false会直接终止整个遍历循环。如果是这个原因,把return false改成return true或者删掉即可。
3. 最稳妥的写法:先确保是标准数组
直接用标准数组定义customerChosenMarkers,从根源避免问题:
const customerChosenMarkers = [ {location_name: "none", mid: "none", lat: "", lng: ""}, {location_name: "1 Helena St, Burnley BB10 4AP, UK", mid: 0, lat: "53.78812", lng: "-2.231830"} ]; // 再遍历 $.each(customerChosenMarkers, function(index, tag) { console.log("LOOP ", index); });
内容的提问来源于stack exchange,提问作者dark_illusion_909099
相关产品推荐
相关产品推荐

