首页 > 解决方案 > 如何用javascript确定json数组中的相交对象?

问题描述

我有这样的json数据:

[{
        "Id": 1,
        "Name": "Test 1",
        "Time": {
            "start": "22:00",
            "end": "22:30",
            "duration": 30
        }
    }, {
        "Id": 2,
        "Name": "Test 2",
        "Time": {
            "start": "22:05",
            "end": "22:35",
            "duration": 30
        }
    }, {
        "Id": 3,
        "Name": "Test 3",
        "Time": {
            "start": "23:25",
            "end": "23:40",
            "duration": 15
        }
    },{
        "Id": 4,
        "Name": "Test 4",
        "Time": {
            "start": "22:15",
            "end": "22:50",
            "duration": 15
        }
    }
]

我想得到这样的结果,确定哪个与Time相交:

  [
    ["Test 1", "Test 2", "Test 4"],
    ["Test 3"]
]

我有解决方案,但它太复杂了,我在彼此内部使用了 4 个循环

如果有更简单的解决方法,请指教,谢谢!

标签: javascriptjsonmongodbobject

解决方案


Try aggregation, I am not sure this will work exact as per your requirement,

  • $addFields add new field startHour, that splits string hour and minute from string, using $split, and $arrayElemAt return first element means hour
  • $group by startHour and make array of Name
db.collection.aggregate([
  {
    $addFields: {
      startHour: {
        $arrayElemAt: [{ $split: ["$Time.start", ":"] }, 0]
      }
    }
  },
  {
    $group: {
      _id: "$startHour",
      Name: { $push: "$Name" }
    }
  }
])

Playground

Result:

[
  {
    "Name": ["Test 1","Test 2","Test 4"],
    "_id": "22"
  },
  {
    "Name": ["Test 3"],
    "_id": "23"
  }
]

推荐阅读