js将数组对象中某个值相同的对象合并成一个新对象并把这个对象插入到数组当中

时间:2025-01-20 21:14:00

一般开发的时候,后端返回的数据格式并不是自己想要的,因此就需要自己对后端传过来的数据进行组合并赋值给一个新的数组/对象,今天我遇到一个问题就是后端把订单的数据分成单独的数组一个个返回,大家都知道订单 不一定是只有一个商品,也有会有多个商品,但是后端并没有给我们把相同的订单组合成我们想要的数据格式,因此我在前端做了一个数据的重组,
一开始我把订单编号(order_sn)抽离出来赋值给一个定义好的数组,接下来上代码:

let data = [
	{
		name: '商品名',
		id: 0,
		order_sn: '12343265253'
	},
	{
		name: '商品名1',
		id: 1,
		order_sn: '12343265253'
	},
	{
		name: '商品名'2,
		id: 2,
		order_sn: '12343265252'
	},
	{
		name: '商品名3',
		id: 3,
		order_sn: '12343265252'
	},
]
 

以上是我写的假数据,以order_sn为例:
为什么要加多一个order_sn的声明呢?
因为如果不加多一个order_sn的话,list会重复push(order_sn)

let order_sn = [];
(item => {
  if(order_sn.indexOf(item.order_sn) === -1){
    ({
      order_sn: item.order_sn,
      goodsList: []
    });
    order_sn.push(item.order_sn)
  }
});
 

这里把order_sn抽离出来,并提前赋值到新的数组(list)当中,

(item => {
 (items => {
    if(item.order_sn == items.order_sn){
      (items)
    }
  })
})
 

然后再把相同的订单编号的订单push到list当中定义好的goodsList当中,这样当我们需要对订单页进行数据渲染时,能够根据对应的订单号渲染出我们需要的效果

下面是合并后的结果:

list=[
	{
		order_sn: '12343265253',
		goodsList: [
			{
				name: '商品名',
				id: 0,
				order_sn: '12343265253',
			},
			{
				name: '商品名1',
				id: 1,
				order_sn: '12343265253',
			},
		]
	},
	{
		order_sn: '12343265252',
		goodsList: [
			{
				name: '商品名'2,
				id: 2,
				order_sn: '12343265252'
			},
			{
				name: '商品名3',
				id: 3,
				order_sn: '12343265252'
			},
		]
	}
]

如果此文对你有用请动动你的小手点个赞!谢谢!!!
————————————————
版权声明:本文为****博主「前端_酒館」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:/weixin_38031256/article/details/103122872

方法二:

data
    var data = [{
        "cart_goods_number": 3,
        "goods_id": 3,
        "goods_name": "honor7x",
        "goods_img": "",
        "goods_price": 1299,
        "shop_id": 4,
        "shop_name": "honor之家"
    }, {
        "cart_goods_number": 2,
        "goods_id": 4,
        "goods_name": "honor6x",
        "goods_img": "",
        "goods_price": 1199,
        "shop_id": 4,
        "shop_name": "honor之家"
    }, {
        "cart_goods_number": 1,
        "goods_id": 1,
        "goods_name": "iPhonex",
        "goods_img": "",
        "goods_price": 8888,
        "shop_id": 1,
        "shop_name": "iPhone之家"
    }]
data1
    var data1 = [{
        "shop_id": 4,
        "shop_name": "honor之家",
        goodsList: [{
            "cart_goods_number": 3,
            "goods_id": 3,
            "goods_name": "honor7x",
            "goods_img": "",
            "goods_price": 1299,
        }, {
            "cart_goods_number": 2,
            "goods_id": 4,
            "goods_name": "honor6x",
            "goods_img": "",
            "goods_price": 1199,
        }]
    }, {
        "shop_id": 1,
        "shop_name": "iPhone之家",
        goodsList: [{
            "cart_goods_number": 1,
            "goods_id": 1,
            "goods_name": "iPhonex",
            "goods_img": "",
            "goods_price": 8888,
        }]
    }]

函数:

let result = ((result, item) => {
let index = (v => v.shop_id === item.shop_id);
let {shop_id,shop_name,...single} = item;
if (index === -1) {
({shop_id,shop_name,goods_list:[single]});
} else {
result[index].goods_list.push(single);
}
return result;
}, []);
(result);

版权声明: 转载请附上原文出处链接及本声明。
原文链接:/wenda/detail/506272