如何合并两个JSON数组?现有合并方法失效求助
如何合并两个WooCommerce订单JSON数组?
你之前尝试用JSON.stringify转字符串再拼接的思路走偏啦——因为两个数组转字符串后拼接出来的格式是"[{...}][{...}]",这根本不是合法的JSON结构,JSON.parse肯定解析失败。其实不用绕这么大弯,直接操作数组本身就好,因为ordersByCustomerId返回的已经是JavaScript数组了!
正确的数组合并方式
有两种简单直接的方法可以合并两个同格式的订单数组:
- 使用数组的
concat方法:const mergedOrders = response1.concat(response2); - 使用ES6扩展运算符(更简洁):
const mergedOrders = [...response1, ...response2];
这两种方法都会把第二个数组的所有元素追加到第一个数组后面,得到一个包含所有订单的新数组。
优化你的异步代码(避免回调地狱)
你原来的代码是嵌套then,先请求第一个订单列表再请求第二个,这样其实会浪费时间——两个请求完全可以并行发起。用Promise.all来同时处理两个异步请求,代码会更清晰高效:
fetchMyOrders: (dispatch) => { dispatch({ type: types.FETCH_CART_PENDING }); // 同时发起两个订单请求 Promise.all([ WooWorker.ordersByCustomerId(11, 40, 1), WooWorker.ordersByCustomerId(154, 40, 1) ]) .then(([response1, response2]) => { // 合并两个订单数组 const mergedOrders = [...response1, ...response2]; // 把合并后的数据dispatch出去 dispatch({ type: types.FETCH_MY_ORDER, data: mergedOrders }); }) .catch((err) => { // 别忘了处理错误,给用户反馈或者记录日志 console.error('获取订单失败:', err); dispatch({ type: types.FETCH_CART_ERROR, error: err }); }); }
额外补充:如果需要去重
如果两个订单列表里可能存在重复的订单(比如同一个id的订单),可以用Map来实现去重,保留最后出现的那个订单:
const mergedOrders = [...new Map( [...response1, ...response2].map(order => [order.id, order]) ).values()];
内容的提问来源于stack exchange,提问作者pmj
相关产品推荐
相关产品推荐

