如何修正getOpenedBoxes函数,正确筛选已开启的盒子?
问题修正方案
现有代码的问题点:
- map参数误用:
map的回调函数第一个参数是当前遍历的整个盒子对象,不是单独的open/price/opened属性。你现在的写法相当于把盒子对象赋值给open,把数组索引赋值给price,把原数组赋值给opened,构造出来的新对象里opened是原数组,永远不等于false,所以filter会保留所有元素。 - filter条件写反:需求是筛选
opened: true的盒子,但代码里判断的是boxes.opened === false。 - 多余的map操作:不需要重新构造对象,直接对原数组过滤即可。
修正后的代码:
function getOpenedBoxes(data) { return data.boxes.filter(box => box.opened === true); }
验证测试:
- 初始数据调用后,会返回仅包含
box_A的数组,长度为1,符合预期。 - 将
data.boxes[2].opened改为true后,返回包含box_A和box_C的数组,长度为2,符合预期。
如果需要返回原对象的副本(避免后续修改影响原数据),可以在filter后加map浅拷贝:
function getOpenedBoxes(data) { return data.boxes .filter(box => box.opened === true) .map(box => ({ ...box })); }
内容的提问来源于stack exchange,提问作者user19522560
相关产品推荐
相关产品推荐

