网页抓取技术咨询:将结果中的undefined替换为0及HTML元素创建问题
解决方法:将undefined替换为0而非直接过滤
你完全不需要创建新的HTML元素来解决这个问题,只需要调整映射逻辑,把过滤步骤替换成条件判断赋值即可。原来的filter会直接移除没有子元素的项,现在我们可以在map里一次性处理所有情况:
修改后的完整代码
var elems = document.getElementsByClassName("breakfast"); elems = [...elems]; // 转换HTMLCollection为数组 // 直接在一次map中完成判断和取值,无需单独filter elems = elems.map(elem => { const child = elem.children[0]; // 三元运算符判断:如果子元素存在则取title,否则返回0 return child ? child.getAttribute("title") : 0; }); document.write(elems);
代码逻辑说明
- 移除过滤步骤:不再需要过滤掉没有子元素的项,而是保留所有元素,对每个元素单独处理;
- 合并两次映射操作:把“取子元素”和“取title/替换0”的逻辑合并到一个
map里,更简洁高效; - 三元运算符的作用:
child ? child.getAttribute("title") : 0会先检查child是否存在(非undefined),存在则获取它的title属性,不存在则直接返回0。
测试结果
针对你提供的HTML结构,运行这段代码后会输出:1,0,2,3,0,完美实现“保留所有项,将原本的undefined替换为0”的需求。
内容的提问来源于stack exchange,提问作者gurkensaas
相关产品推荐
相关产品推荐

