JavaScript:将扫描条码得到的字符串数组转换为结构化对象数组
实现方案
我们可以通过一次遍历完成转换,不需要复杂的索引计算,逻辑如下:
- 初始化空的结果数组存储最终的对象列表
- 声明临时变量存储当前正在组装的订单对象
- 遍历原始数组的每一个元素:
- 遇到
NEW关键字时,如果当前已经有正在组装的订单对象,先把它推入结果数组 - 之后新建一个订单对象,下一个遍历到的元素赋值给该对象的
order_id属性,同时初始化空的serial_numbers数组 - 非
NEW且已经进入订单组装阶段的元素,直接推入当前订单的serial_numbers数组
- 遇到
- 遍历结束后,把最后一个组装完成的订单对象推入结果数组
示例代码如下:
const array = ['NEW', '1111', 'serial1', 'serial2', 'NEW', '2222', 'serial3', 'serial4']; const result = []; let currentOrder = null; for (const item of array) { if (item === 'NEW') { // 遇到NEW,先保存之前存在的订单 if (currentOrder) { result.push(currentOrder); } // 新建当前订单占位,下一个元素即为order_id currentOrder = { order_id: '', serial_numbers: [] }; } else { if (currentOrder.order_id === '') { // 刚新建订单后的第一个元素是order_id currentOrder.order_id = item; } else { // 其余元素为序列号 currentOrder.serial_numbers.push(item); } } } // 遍历结束后加入最后一个组装完成的订单 if (currentOrder) { result.push(currentOrder); } console.log(result);
运行后得到的result就是你需要的目标结构,单订单、多序列号等边界场景都可以正常适配。
内容的提问来源于stack exchange,提问作者Kheber
相关产品推荐
相关产品推荐

