使用数组方法向新数组添加元素时函数仅返回第一个元素求助
问题排查
- 循环内提前return:你在for循环的第一行就执行了
return itemList.push(deliveryOrders[i].item),Array.push()的返回值是插入元素后数组的长度,所以第一次循环就直接返回了1,不会继续遍历后续元素,这是你拿到返回值1的核心原因。 - 无效的concat逻辑:循环外的
itemList.concat(deliveryOrders[i].item)永远不会被执行,就算执行也不会生效:concat不会修改原数组,只会返回新数组,且此时循环外的i已经等于deliveryOrders.length,访问deliveryOrders[i]会得到undefined,存在越界问题。 - 输出类型不匹配:测试用例期望的返回值是逗号加空格分隔的字符串,你原本的逻辑就算跑通返回的也是数组,和预期类型不符。
正确实现
基础for循环版本(兼容低版本环境)
function listItems(deliveryOrders) { var itemList = []; for (var i = 0; i < deliveryOrders.length; i++) { itemList.push(deliveryOrders[i].item); } // 把数组转成逗号加空格分隔的字符串 return itemList.join(', '); }
简洁版(使用ES5+数组方法)
直接用Array.map提取所有item字段,再用join拼接即可,不需要手动写循环:
function listItems(deliveryOrders) { return deliveryOrders.map(function(order) { return order.item; }).join(', '); }
内容的提问来源于stack exchange,提问作者andrew c
相关产品推荐
相关产品推荐

