Javascript 基于属性合并数组中的项并维护引用
我有一个项目数组,我正在创建一个时间表。 如果两个或多个项目在x轴上靠得很近(使用“x”值),我希望将它们组合在一起Javascript 基于属性合并数组中的项并维护引用,javascript,arrays,loops,foreach,Javascript,Arrays,Loops,Foreach,我有一个项目数组,我正在创建一个时间表。 如果两个或多个项目在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
。这构成了紧密的联系。