Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象数组压缩为具有嵌套数组的唯一对象数组_Javascript_Arrays_Node.js_Mongodb_Chart.js - Fatal编程技术网

Javascript 对象数组压缩为具有嵌套数组的唯一对象数组

Javascript 对象数组压缩为具有嵌套数组的唯一对象数组,javascript,arrays,node.js,mongodb,chart.js,Javascript,Arrays,Node.js,Mongodb,Chart.js,我在MongoDB中有arr数据,需要将文档压缩成一个,以便在chartjs中显示数据 arr = [ { "_id": "5d7baef782e09dc7f6b5be2d", "awaySpread": "3.0", "homeSpread": "-3.0", "homeTeam": "Tennessee Titans", "awayId": "4529605_261_sp", "awayT

我在MongoDB中有arr数据,需要将文档压缩成一个,以便在chartjs中显示数据

arr = [
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "3.0",
        "homeSpread": "-3.0",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00",
        "createdDate": "2019-09-13T13:00:06.527Z"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be31",
        "awaySpread": "-19.5",
        "homeSpread": "19.5",
        "homeTeam": "Miami Dolphins",
        "awayId": "4529609_269_sp",
        "awayTeam": "New England Patriots",
        "homeId": "4529609_270_sp",
        "eventDate": "2019-09-15 13:00:00",
        "createdDate": "2019-09-13T13:00:06.527Z"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "2.5",
        "homeSpread": "-2.5",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00",
        "createdDate": "2019-09-13T13:30:06.527Z"
    }
]
希望进入:

newarr = [
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "3.0",
        "homeSpread": "-3.0",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00",
        "createdDate": "2019-09-13T13:00:06.527Z",
        "lines": {
           "spread": ["3.0","2.5"],
           "dates: : ["2019-09-13T13:00:06.527Z","2019-09-13T13:30:06.527Z"]
         },

    },
    {
        "_id": "5d7baef782e09dc7f6b5be31",
        "awaySpread": "-19.5",
        "homeSpread": "19.5",
        "homeTeam": "Miami Dolphins",
        "awayId": "4529609_269_sp",
        "awayTeam": "New England Patriots",
        "homeId": "4529609_270_sp",
        "eventDate": "2019-09-15 13:00:00"
        "createdDate": "2019-09-13T13:00:06.527Z",
        "lines": {
           "spread": ["-19.5"],
           "dates: : ["2019-09-13T13:00:06.527Z"]
         },
    }
]
我可以使用过滤器仅返回基于awayId的唯一对象,但我不确定使用过滤器是否允许我推送带有排列和日期的行。

我会使用该功能

我正在构建一个对象,其中id是键,值是对象。 当我已经在里面有了id(第二次遇到相同的id时),我将相关的值推到行中

最后,我将对象的值记录在控制台日志中,该对象是您想要的输出

arr = [
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "3.0",
        "homeSpread": "-3.0",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be31",
        "awaySpread": "-19.5",
        "homeSpread": "19.5",
        "homeTeam": "Miami Dolphins",
        "awayId": "4529609_269_sp",
        "awayTeam": "New England Patriots",
        "homeId": "4529609_270_sp",
        "eventDate": "2019-09-15 13:00:00"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "2.5",
        "homeSpread": "-2.5",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00"
    }
]

const newArr = arr.reduce((result, itr) => {
  if (result[itr.awayId]) {
    result[itr.awayId].lines.spread.push(itr.awaySpread)
    result[itr.awayId].lines.dates.push(itr.eventDate)
  } else {
    result[itr.awayId] = { ...itr, lines: { spread: [itr.awaySpread], dates: [itr.eventDate] }}
  }
  return result
}, {})

console.log(Object.values(newArr))
我会使用这个函数

我正在构建一个对象,其中id是键,值是对象。 当我已经在里面有了id(第二次遇到相同的id时),我将相关的值推到行中

最后,我将对象的值记录在控制台日志中,该对象是您想要的输出

arr = [
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "3.0",
        "homeSpread": "-3.0",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be31",
        "awaySpread": "-19.5",
        "homeSpread": "19.5",
        "homeTeam": "Miami Dolphins",
        "awayId": "4529609_269_sp",
        "awayTeam": "New England Patriots",
        "homeId": "4529609_270_sp",
        "eventDate": "2019-09-15 13:00:00"
    },
    {
        "_id": "5d7baef782e09dc7f6b5be2d",
        "awaySpread": "2.5",
        "homeSpread": "-2.5",
        "homeTeam": "Tennessee Titans",
        "awayId": "4529605_261_sp",
        "awayTeam": "Indianapolis Colts",
        "homeId": "4529605_262_sp",
        "eventDate": "2019-09-15 13:00:00"
    }
]

const newArr = arr.reduce((result, itr) => {
  if (result[itr.awayId]) {
    result[itr.awayId].lines.spread.push(itr.awaySpread)
    result[itr.awayId].lines.dates.push(itr.eventDate)
  } else {
    result[itr.awayId] = { ...itr, lines: { spread: [itr.awaySpread], dates: [itr.eventDate] }}
  }
  return result
}, {})

console.log(Object.values(newArr))

createdDate
s从何而来?在数据库中创建记录时,只需在SOcreatedDate上搜索“按属性分组对象数组”,为什么在输入
arr
中缺少它?抱歉,更新了代码
createdDate
s从何而来?只需搜索“按属性分组对象数组”在数据库中创建记录时,会设置on-SOcreatedDate,为什么输入中缺少它?抱歉,更新了代码谢谢,但这只嵌套了排列和日期,不会通过唯一的awayId进行压缩groupBy是根据
\u id
awayId
?awayId进行的,我在发表评论后意识到。谢谢你可以控制它:)gl谢谢,但这只是嵌套排列和日期,不通过唯一的awayId压缩groupBy是根据
\u id
awayId
?awayId,我在发表评论后意识到。谢谢您可以控制它:)GL