js 把二维数组中指定元素提出,与其余元素组成新的数组

[0:{
id: "247",
order_number: "21251",
name: "张三",
tel: 13911111,
color:"黑色",
weight:"10kg"
}
1:{
id: "248",
order_number: "21251",
name: "张三",
tel: 13911111,
color:"白色",z
weight:"13kg"
}
2:{
id: "249",
order_number: "21252",
name: "李四",
tel: 13922222,
color:"绿色",
weight:"11kg"
}
3:{
id: "250",
order_number: "21252",
name: "李四",
tel: 13922222,
color:"红色",
weight:"12kg"
}]
.....
怎样做到,把上面的这种数组变成下面的样子,
0:{
order_number: "21251",
name: "张三",
tel: 13911111

0:{id: "247",color:"黑色",weight:"10kg"}
1:{id: "248",color:"白色",weight:"13kg"}

}

1:{
order_number: "21252",
name: "李四",
tel: 13922222

0:{id: "249",color:"绿色",weight:"11kg"}
1:{id: "250",color:"红色",weight:"12kg"}

}
.......
就是相同的提出来.

let list = [
    {
      id: "247",
      order_number: "21251",
      name: "张三",
      tel: 13911111,
      color: "黑色",
      weight: "10kg"
    },
    {
      id: "248",
      order_number: "21251",
      name: "张三",
      tel: 13911111,
      color: "白色",
      weight: "13kg"
    },
    {
      id: "249",
      order_number: "21252",
      name: "李四",
      tel: 13922222,
      color: "绿色",
      weight: "11kg"
    },
    {
      id: "250",
      order_number: "21252",
      name: "李四",
      tel: 13922222,
      color: "红色",
      weight: "12kg"
    }
  ];

  let result = [];

  list.forEach(item => {
    let res = result.find(row => {
      return row.order_number === item.order_number
    });
    if (!res) {
      res = {
        order_number: item.order_number,
        name: item.name,
        tel: item.tel,
        list: []
      };
      result.push(res)
    }
    res.list.push(item)  //这里不想全量可以自己去改要赋值的对象字段
  });

  console.log(result)

用es6简单写了一个,代码可用,如实际生产请转译成es5

温馨提示:答案为网友推荐,仅供参考
相似回答