从数组中提取相同属性值的元素重新排列成新数组

有如下数组

[{
    "id": "49088",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title":"demo-title1"
},{
    "id": "49089",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title":"demo-title2"
},{
    "id": "49090",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23750",
    "title":"demo-title3"
},{
    "id": "49091",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title":"demo-title4"
},{
    "id": "49092",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title":"demo-title5"
},{
    "id": "49093",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23752",
    "title":"demo-title6"
}]

需转换成这种格式

[
    [{
        "id": "49088",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23749",
        "title": "demo-title1"
    }, {
        "id": "49089",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23749",
        "title": "demo-title2"
    }], {
        "id": "49090",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23750",
        "title": "demo-title3"
    },
    [{
        "id": "49091",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23751",
        "title": "demo-title4"
    }, {
        "id": "49092",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23751",
        "title": "demo-title5"
    }], {
        "id": "49093",
        "user_id": "8733",
        "user_name": "echo",
        "order_id": "23752",
        "title": "demo-title6"
    }
]

即把原数组有相同order_id的元素合并成新数组添加到原数组里面。请高手指点迷津。

阅读 2.8k
2 个回答
var arr = [{
    "id": "49088",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title":"demo-title1"
},{
    "id": "49089",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title":"demo-title2"
},{
    "id": "49090",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23750",
    "title":"demo-title3"
},{
    "id": "49091",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title":"demo-title4"
},{
    "id": "49092",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title":"demo-title5"
},{
    "id": "49093",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23752",
    "title":"demo-title6"
}]

var result = []
var temp = {}
for (let item of arr) {
  if (!temp[item.order_id]) {
    temp[item.order_id] = []
    result.push(temp[item.order_id])
  }
  temp[item.order_id].push(item)
}
console.log(result)
let dataArr = [{
    "id": "49088",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title": "demo-title1"
}, {
    "id": "49089",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23749",
    "title": "demo-title2"
}, {
    "id": "49090",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23750",
    "title": "demo-title3"
}, {
    "id": "49091",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title": "demo-title4"
}, {
    "id": "49092",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23751",
    "title": "demo-title5"
}, {
    "id": "49093",
    "user_id": "8733",
    "user_name": "echo",
    "order_id": "23752",
    "title": "demo-title6"
}]

let orderIds = dataArr.map(item => item.order_id)
orderIds = [... new Set(orderIds)]

let orders = orderIds.map(orderId => dataArr.filter(dataItem => orderId === dataItem.order_id))
orders = orders.map(ot => ot.length > 1 ? ot : ot[0])

orders = JSON.stringify(orders)
console.log(orders)

/*
输出
[[{"id":"49088","user_id":"8733","user_name":"echo","order_id":"23749","title":"demo-title1"},{"id":"49089","user_id":"8733","user_name":"echo","order_id":"23749","title":"demo-title2"}],{"id":"49090","user_id":"8733","user_name":"echo","order_id":"23750","title":"demo-title3"},[{"id":"49091","user_id":"8733","user_name":"echo","order_id":"23751","title":"demo-title4"},{"id":"49092","user_id":"8733","user_name":"echo","order_id":"23751","title":"demo-title5"}],{"id":"49093","user_id":"8733","user_name":"echo","order_id":"23752","title":"demo-title6"}]
*/
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题