JS技术问题:不修改warehouse的aiStaff数组实现机器人注册
实现registerRobot函数(不修改原aiStaff数组)
对象结构定义
robot { id skill currentWorkPlace } warehouse { aiStaff currentStatus boxes }
需求说明
编写registerRobot函数,需完成两个功能:
- 将新机器人的
id加入仓库的aiStaff数组 - 将
warehouse对象的引用赋值给机器人的currentWorkPlace属性
约束条件:不能修改warehouse内部aiStaff的原数组,且不能创建新变量。
原代码问题
当前代码直接替换了aiStaff数组,而非基于原数组创建新数组添加元素:
function registerRobot(robot, warehouse) { robot.currentWorkPlace = warehouse; robot.currentWorkPlace.aiStaff = [robot.id]; }
正确实现方案
可以利用数组的扩展运算符(...)或concat方法,基于原数组创建新数组并添加新机器人id,同时不创建额外变量:
方案1:使用扩展运算符
function registerRobot(robot, warehouse) { robot.currentWorkPlace = warehouse; robot.currentWorkPlace.aiStaff = [...warehouse.aiStaff, robot.id]; }
方案2:使用concat方法
function registerRobot(robot, warehouse) { robot.currentWorkPlace = warehouse; robot.currentWorkPlace.aiStaff = warehouse.aiStaff.concat(robot.id); }
原理说明
- 扩展运算符
...warehouse.aiStaff会把原数组的所有元素展开,再拼接新的robot.id,生成一个全新的数组,原aiStaff数组的内容不会被修改。 concat方法同样会返回一个包含原数组元素和新元素的新数组,不会改变原数组。- 两种方式都没有创建额外变量,直接在赋值语句中完成新数组的生成与赋值。
内容的提问来源于stack exchange,提问作者m.strilec
相关产品推荐
相关产品推荐

