Node.js中如何将多键对象数组合并为单键数组
合并JSON对象中多键对应的数组成一个统一数组
没问题,我来帮你搞定这个合并数组的需求~ 你需要把JSON对象里不同键对应的订单数组合并到一个统一的键下,对吧?这里有几种简单的Node.js实现方式,看你需求选就行:
先明确你的数据场景
假设你的原始数据是这样的(我给你补全了几个示例键,方便演示):
const originalData = { "out-for-delivery": [ { "order_id": 1, "address": { "user_id": 1, "first_name": "Mark", "last_name": "Stevauh", "landmark": "Krti", "mobile": "123456789", "type": "work", "city_id": 4644, "postcode": 0, "address_type": "address", "locker_id": 0, "added_on": "2018-01-01T00:00:00" } } ], "delivered": [ { "order_id": 2, "address": { "user_id": 2, "first_name": "Jane", "last_name": "Doe", "landmark": "Central Park", "mobile": "987654321", "type": "home", "city_id": 4645, "postcode": 10001, "address_type": "address", "locker_id": 0, "added_on": "2018-01-02T00:00:00" } } ], "processing": [ { "order_id": 3, "address": { "user_id": 3, "first_name": "John", "last_name": "Smith", "landmark": "Downtown", "mobile": "555555555", "type": "work", "city_id": 4646, "postcode": 90001, "address_type": "address", "locker_id": 0, "added_on": "2018-01-03T00:00:00" } } ] };
方法1:ES6+简洁写法(推荐)
如果你的Node.js版本支持ES2019及以上(一般Node.js 11+都支持),用Object.values()加Array.flat()一步到位:
// 提取所有键对应的数组,合并成一维数组 const mergedOrders = Object.values(originalData).flat(); // 把合并后的数组放到你想要的键下,比如"all-orders" const result = { "all-orders": mergedOrders }; console.log(result);
方法2:兼容旧Node.js版本
如果你的Node.js版本比较旧(比如低于11.0.0),用Array.concat()来实现合并:
// 用concat把多个数组合并成一个 const mergedOrders = [].concat.apply([], Object.values(originalData)); // 生成最终结果 const result = { "all-orders": mergedOrders };
额外需求:保留原始数据同时添加合并键
如果你想保留原来的所有键值对,同时新增合并后的数组,可以用扩展运算符:
const mergedOrders = Object.values(originalData).flat(); const result = { ...originalData, // 保留原有的所有键和数组 "all-orders": mergedOrders // 新增合并后的键 };
原理说明
Object.values(originalData)会把原始对象中所有键对应的值(也就是各个订单数组)提取成一个二维数组,比如[[订单1], [订单2], [订单3]]flat()或者concat.apply()的作用是把这个二维数组扁平化,变成一维的订单数组[订单1, 订单2, 订单3]- 你可以把
"all-orders"改成任何你需要的键名,比如"merged-orders"都行
内容的提问来源于stack exchange,提问作者Yogesh k
相关产品推荐
相关产品推荐

