将数组与对象数组进行比较,并返回具有分组日期的新对象数组

时间:2020-01-08 18:17:20

标签: javascript arrays json

我正在尝试格式化数据,以使其看起来像desiredResult,现在它以result的形式出现。我的确意识到我有点蛮横地浏览数据,但是我的算法技巧并不出色。我会很乐意帮助您解决我的代码或指出我的方向,以便更好地了解我如何以更有效的方式进行操作。

var endResult = dates.map(function (item) {

  var arrayOfEvents = [];     

  var events = arrayOfObjects.map(function (value) {

    if (item === value.info.startDate) {
      arrayOfEvents.push(value)
      return arrayOfEvents
    } else{
      return ""
    }

  });

  return events

});

{JSON.stringify(endResult, null, 4)}

数组

var dates = 
[
"01-06-2020",
"01-07-2020",
"01-08-2020",
"01-10-2020",
"02-04-2020"
]

对象数组

var arrayOfObjects =
[
{
    "title": "Group President",
    "id": "TpNY1SU_",
    "info": {
        "description": "hi",
        "eventLocation": "change",
        "dailyActivity": "false",
        "startDate": "01-06-2020"
    }
},
{
    "title": "TEST",
    "id": "cEpPxopz",
    "info": {
        "description": "TEST",
        "eventLocation": "TEST",
        "dailyActivity": "true",
        "startDate": "01-07-2020"
    }
},
{
    "title": "Example",
    "id": "jnTMr_r7",
    "info": {
        "description": "example",
        "eventLocation": "Exmaple",
        "dailyActivity": "true",
        "startDate": "01-07-2020"
    }
},
]

所需结果

var desiredResult = [
    [
        {
            "title": "Group President",
            "id": "TpNY1SU_",
            "info": {
                "description": "hi",
                "eventLocation": "change",
                "dailyActivity": "false",
                "startDate": "01-06-2020"
            }
        }
    ],
    [
        {
            "title": "TEST",
            "id": "cEpPxopz",
            "info": {
                "description": "TEST",
                "eventLocation": "TEST",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        },
        {
            "title": "Example",
            "id": "jnTMr_r7",
            "info": {
                "description": "example",
                "eventLocation": "Exmaple",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        }
    ],
]

实际结果

var actualResult = [
[
    [
        {
            "title": "Group President",
            "id": "TpNY1SU_",
            "info": {
                "description": "hi",
                "eventLocation": "change",
                "dailyActivity": "false",
                "startDate": "01-06-2020"
            }
        }
    ],
    "",
    "",
    "",
    "",
    ""
],
[
    "",
    [
        {
            "title": "TEST",
            "id": "cEpPxopz",
            "info": {
                "description": "TEST",
                "eventLocation": "TEST",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        },
        {
            "title": "Example",
            "id": "jnTMr_r7",
            "info": {
                "description": "example",
                "eventLocation": "Exmaple",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        }
    ],
    [
        {
            "title": "TEST",
            "id": "cEpPxopz",
            "info": {
                "description": "TEST",
                "eventLocation": "TEST",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        },
        {
            "title": "Example",
            "id": "jnTMr_r7",
            "info": {
                "description": "example",
                "eventLocation": "Exmaple",
                "dailyActivity": "true",
                "startDate": "01-07-2020"
            }
        }
    ],
    "",
    "",
    ""
],
]

1 个答案:

答案 0 :(得分:0)

除了少数细微调整之外,您处在正确的轨道上

  • 仅当要返​​回与原始大小相同的数组时,才应使用map函数。情况并非如此。数据长度为5,但最终答案将在数组中包含3个项目。因此,forEach is better suited。选择值并推入新数组。
    For循环也可以使用
  • 外部和内部地图都返回"",该数字已包含在最终结果中(由于地图功能)。使用forEach并将结果推入数组。
    在此处阅读更多信息:JavaScript: Difference between .forEach() and .map()

  • 使用forEach时,仅需要将包含数据的值推入最终结果中。因此,我们需要将长度检查设为> 0。

已修改以下代码段中的代码:

var dates = [
  "01-06-2020",
  "01-07-2020",
  "01-08-2020",
  "01-10-2020",
  "02-04-2020"
]

var arrayOfObjects = [{"title":"Group President","id":"TpNY1SU_","info":{"description":"hi","eventLocation":"change","dailyActivity":"false","startDate":"01-06-2020"}},{"title":"TEST","id":"cEpPxopz","info":{"description":"TEST","eventLocation":"TEST","dailyActivity":"true","startDate":"01-07-2020"}},{"title":"Example","id":"jnTMr_r7","info":{"description":"example","eventLocation":"Exmaple","dailyActivity":"true","startDate":"01-07-2020"}}]

var endResult = []
dates.forEach(function(item) {
  var arrayOfEvents = [];
  var events = arrayOfObjects.forEach(function(value) {
    if (item === value.info.startDate) {
      arrayOfEvents.push(value)
    }
  });
  
  if(arrayOfEvents.length > 0) endResult.push(arrayOfEvents)

});

console.log(JSON.stringify(endResult, null, 4))

希望有帮助。如有任何疑问,请回复。