Javascript 基于属性合并数组中的项并维护引用

Javascript 基于属性合并数组中的项并维护引用,javascript,arrays,loops,foreach,Javascript,Arrays,Loops,Foreach,我有一个项目数组,我正在创建一个时间表。 如果两个或多个项目在x轴上靠得很近(使用“x”值),我希望将它们组合在一起 循环遍历数组并比较“x”属性。如果它们靠得很近,则将项目推入两个项目的“实例”字段 将两个项目的日期更改为使用第一个项目的日期 将原始日期保存在名为“idDate”的字段中 如果认为某个项目与另一个项目相近,请确保该项目尚未合并。如果有,请使用与之组合的项的“x”属性 在代码中,我创建了一个名为“desiredArray”的数组,以显示我希望输出的内容 我的当前代码将关闭项推送到

我有一个项目数组,我正在创建一个时间表。 如果两个或多个项目在x轴上靠得很近(使用“x”值),我希望将它们组合在一起

  • 循环遍历数组并比较“x”属性。如果它们靠得很近,则将项目推入两个项目的“实例”字段

  • 将两个项目的日期更改为使用第一个项目的日期

  • 将原始日期保存在名为“idDate”的字段中
  • 如果认为某个项目与另一个项目相近,请确保该项目尚未合并。如果有,请使用与之组合的项的“x”属性
  • 在代码中,我创建了一个名为“desiredArray”的数组,以显示我希望输出的内容
  • 我的当前代码将关闭项推送到第一个关闭项的“实例”数组中,但不维护数组中的其他项。我也不知道怎么做约会部分。感谢您的帮助

    const数组=[{
    “日期”:“2017-03-04T13:30:00Z”,
    “id”:“7”,
    “x”:“-448.056888554414”,
    “实例”:[{
    “日期”:“2017-03-04T13:30:00Z”,
    “id”:“7”,
    “x”:“-448.056888554414”
    }]
    },
    {
    “日期”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”,
    “实例”:[{
    “日期”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”
    }]
    },
    {
    “日期”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”,
    “实例”:[{
    “日期”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”
    }]
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”,
    “实例”:[{
    “日期”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”
    }]
    }
    ];
    常量newArray=[];
    newArray.push({
    “日期”:“2018-08-06T13:30:00Z”,
    “id”:“14”,
    “x”:“639.95954980175038”,
    “实例”:[{
    “日期”:“2018-08-06T13:30:00Z”,
    “id”:“14”,
    “x”:“1054”
    }]
    });
    array.reverse().forEach((当前:任意)=>{
    const last=newArray[newArray.length-1];
    如果(最后的.x-当前的.x<40){
    last.instances.push(current.instances[0]);
    }否则{
    newArray.push(当前);
    }
    });
    log(newArray);
    //这就是我想要创造的
    const desiredArray=[{
    “日期”:“2018-08-06T13:30:00Z”,
    “id”:“14”,
    “x”:“639.95954980175038”,
    “实例”:[{
    “日期”:“2018-08-06T13:30:00Z”,
    “id”:“14”,
    “x”:“1054”
    }]
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “idDate”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”,
    “实例”:[{
    “日期”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”
    },
    {
    “日期”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”
    }
    ]
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “idDate”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”,
    “实例”:[{
    “日期”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”
    },
    {
    “日期”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”
    }
    ]
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “idDate”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”,
    “实例”:[{
    “日期”:“2017-08-13T13:30:00Z”,
    “id”:“11”,
    “x”:“25.521193637366817”
    },
    {
    “日期”:“2017-08-15T13:30:00Z”,
    “id”:“12”,
    “x”:“31.296536103120246”
    },
    {
    “日期”:“2017-08-20T13:30:00Z”,
    “id”:“13”,
    “x”:“39.95954980175038”
    }
    ]
    },
    {
    “日期”:“2017-03-04T13:30:00Z”,
    “idDate”:“2017-03-04T13:30:00Z”,
    “id”:“7”,
    “x”:“-448.056888554414”,
    “实例”:[{
    “日期”:“2017-03-04T13:30:00Z”,
    “id”:“7”,
    “x”:“448.056888554414”
    }]
    }
    
    ]
    重复的值太多了。它由包含自身作为实例的父项开始,而具有相同id的第一个项包含不同的值(-448 vs 448)?这是一个错误,我修复了它。它在实际代码中的重复性要小得多,但我尝试简化示例。在实际的应用程序中,顶级对象用于绘制时间线,实例用于生成工具提示。什么是“紧密结合”呢?在代码中,我有
    last.x-current.x<40
    。这构成了紧密的联系。