【发布时间】:2021-12-30 00:07:55
【问题描述】:
我正在尝试删除数组中的“重复”对象,同时保留与之关联的最低值的对象。
~~原创
var array = [
{
"time": "2021-11-12T20:37:11.112233Z",
"value": 3.2
},
{
"time": "2021-11-12T20:37:56.115222Z",
"value": 3.8
},
{
"time": "2021-11-13T20:37:55.112255Z",
"value": 4.2
},
{
"time": "2021-11-13T20:37:41.112252Z",
"value": 2
},
{
"time": "2021-11-14T20:37:22.112233Z",
"value": 3.2
}
]
~~预期输出
var array = [
{
"time": "2021-11-12T20:37:11.112233Z",
"value": 3.2
},
{
"time": "2021-11-13T20:37:41.112252Z",
"value": 2
},
{
"time": "2021-11-14T20:37:22.112233Z",
"value": 3.2
}
]
到目前为止我所拥有的:
var result = array.reduce((aa, tt) => {
if (!aa[tt.time]) {
aa[tt.time] = tt;
} else if (Number(aa[tt.time].value) < Number(tt.value)) {
aa[tt.time] = tt;
}
return aa;
}, {});
console.log(result);
我意识到我正在尝试做的问题是“时间”属性与我认为是重复的其他时间值不同。
虽然对于这个用例,我不需要毫秒。 YYYY-MM-DDTHH:MM(到分钟)很好。当时间不完全相同时,我不确定如何针对这种情况实施减少方法。也许如果只检查字符串中的前 16 个字符?
如果需要任何其他信息,请告诉我。
【问题讨论】:
-
"到分钟就好":如果分钟相差1,但时间差真的只有5秒呢?比如 45:01 和 44:59? “也许如果只检查字符串中的前 16 个字符?” 这不是由您决定的吗?这会产生你想要的结果吗?
-
请允许我澄清一下。我需要做忽略秒和毫秒的减少方法。因此,只检查时间值的前 16 个字符确实会产生我想要的结果。
标签: javascript arrays javascript-objects