与Jquery结合的Javascript对象?

时间:2018-06-13 08:36:59

标签: javascript jquery arrays javascript-objects

我在Javascript / jQuery中操作数据时遇到问题,我可以使用一些帮助。

我有一系列像这样的对象:

var projects = [
  {title:'project1'},
  {title:'project2'},
  {title:'project3'},
];

我有另一个对象数组,如下所示:

ganttEvents = [
  {
    text: 'some text',
    start_date: '2018/06/13',
    end_date: '2018/06/14',
    id: '1',
    readonly: true,
    project: 'project1',
    category: 'scoping',
  }
  {
    text: 'some text2',
    start_date: '2018/06/14',
    end_date: '2018/06/15',
    id: '1',
    readonly: true,
    project: 'project2',
    category: 'scoping',
  }
  {
    text: 'some text3',
    start_date: '2018/06/15',
    end_date: '2018/06/16',
    id: '1',
    readonly: true,
    project: 'project2',
    category: 'design',
  }
  {
    text: 'some text4',
    start_date: '2018/06/13',
    end_date: '2018/06/14',
    id: '1',
    readonly: true,
    project: 'project2',
    category: 'scoping',
  }
  {
    text: 'some text5',
    start_date: '2018/06/14',
    end_date: '2018/06/15',
    id: '1',
    readonly: true,
    project: 'project3',
    category: 'testing',
  }
  {
    text: 'some text6',
    start_date: '2018/06/15',
    end_date: '2018/06/16',
    id: '1',
    readonly: true,
    project: 'project3',
    category: 'build',
  }
 ];

第二个对象中的项目字段将始终是第一个数组中的对象之一。

然后我需要得到一个如下所示的对象:

source: [
    {
    name: "project1", // a project defined in the projects array
    desc: "scoping", // the category from the ganttEvents array of objects
    values: [
              {
                to: "2018/06/13", // the start_date from the ganttEvents array of objects
                from: "2018/06/14", // the end_date from the ganttEvents array of objects
                desc: "some text", // the text from the ganttEvents array of objects
                label: "some text", // the text from the ganttEvents array of objects           
              }
            ]
    },
    {
    name: "project2", // a project defined in the projects array
    desc: "scoping", // the category from the ganttEvents array of objects
    values: [
              {
                to: "2018/06/14",
                from: "2018/06/15",
                desc: "some text2",
                label: "some text2",            
              },
              {
              to: "2018/06/13",
              from: "2018/06/14",
              desc: "some text4",
              label: "some text4",          
              },
            ]
    },
    {
    name: "project3", // a project defined in the projects array
    desc: "testing", // the category from the ganttEvents array of objects
    values: [
              {
              to: "2018/06/14",
              from: "2018/06/15",
              desc: "some text5",
              label: "some text5",          
              }
            ]
    },
    {
    name: "project3", // a project defined in the projects array
    desc: "build", // the category from the ganttEvents array of objects
    values: [
              {
              to: "2018/06/15",
              from: "2018/06/16",
              desc: "some text6",
              label: "some text6",          
              }
            ]
    },
  ]

每个项目的所有阶段都可能有多个值,并且可能根本没有需要从源对象中省略事件的项目。

请你帮忙吗?

修改

这背后的背景是我使用SharePointPlus从SharePoint列表中提取事件列表。这会产生ganttEvents数组。我需要将其插入到jQuery.Gantt库中,该库需要以特定方式格式化事件。

jQuery.Gantt

我很抱歉,但我相对较新的Javascript(通常是Python程序员)我尝试过不同的方法,但无济于事。

1 个答案:

答案 0 :(得分:1)

您可以使用-DEIGEN_INTERNAL_DEBUGGING将数组分组到一个对象中。使用项目和类别的连接值作为键。使用reduce将对象转换为数组。



Object.values




如果没有var ganttEvents = [{"text":"some text","start_date":"2018/06/13","end_date":"2018/06/14","id":"1","readonly":true,"project":"project1","category":"scoping"},{"text":"some text2","start_date":"2018/06/14","end_date":"2018/06/15","id":"1","readonly":true,"project":"project2","category":"scoping"},{"text":"some text3","start_date":"2018/06/15","end_date":"2018/06/16","id":"1","readonly":true,"project":"project2","category":"design"},{"text":"some text4","start_date":"2018/06/13","end_date":"2018/06/14","id":"1","readonly":true,"project":"project2","category":"scoping"},{"text":"some text5","start_date":"2018/06/14","end_date":"2018/06/15","id":"1","readonly":true,"project":"project3","category":"testing"},{"text":"some text6","start_date":"2018/06/15","end_date":"2018/06/16","id":"1","readonly":true,"project":"project3","category":"build"}]; var result = Object.values(ganttEvents.reduce((c, v) => { let k = v.project + "-" + v.category; c[k] = c[k] || {name: v.project,desc: v.category,values: []}; c[k].values.push({to: v.end_date,from: v.start_date,desc: v.text,label: v.text}); return c; }, {})); console.log(result);,您可以使用Object.values()

循环播放



for