gpt4 book ai didi

javascript - 根据对象内数字的接近程度减少数组

转载 作者:行者123 更新时间:2023-11-30 11:28:23 25 4
gpt4 key购买 nike

我有一个如下所示的数组:

[  
{ "begin": 870, "end": 889, "spanType": ["plan", "gt-plan"] },
{ "begin": 890, "end": 925, "spanType": ["plan", "gt-plan"] },
{ "begin": 926, "end": 938, "spanType": ["plan", "gt-plan"] },
{ "begin": 939, "end": 958, "spanType": ["plan", "gt-plan"] },
{ "begin": 7732, "end": 7790, "spanType": ["plan", "gt-plan"] },
{ "begin": 7791, "end": 7879, "spanType": ["plan", "gt-plan"] }
]

我需要遍历它并创建一个如下所示的数组:

[  
{ "begin": 870, "end": 958, "spanType": ["plan", "gt-plan"] },
{ "begin": 7732, "end": 7879, "spanType": ["plan", "gt-plan"] }
]

基本上,如果一个 span.end 在下一个 span.begin 的 3 以内,则将两个 span 合并在一起

这是我现在拥有的(不工作)see fiddle :

spans.forEach(function(d,i) {
if (i+1 <= spans.length - 1) {
if (spans[i+1].begin <= d.end + 3) {
d.end = spans[i+1].end;
newSpans.push(d);
}
else {
newSpans.push(spans[i]);
}
}
});

see fiddle

最佳答案

首先我会对跨度进行排序,这样我们就不需要一遍又一遍地检查所有元素:

spans.sort((a,b) => a.begin - b.begin);

现在我们可以轻松遍历并合并:

const result = [];
result.push(spans.reduce((prev,curr) => {
if(prev.end < curr.begin - 1){
result.push(prev);
return Object.assign({},curr);
}
prev.end = Math.max(prev.end, curr.end);
return prev;
}));

Try it

关于javascript - 根据对象内数字的接近程度减少数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47142604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com