javascript - 数组遍历,获得最终覆盖值
本文介绍了javascript - 数组遍历,获得最终覆盖值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var arr = [{
s: 8,
e: 16
}, {
s: 17,
e: 23.5
}, {
s: 7,
e: 11
}, {
s: 23.5,
e: 24
}, {
s: 23.5,
e: 24
},{
s: 4,
e: 5
},{
s: 3,
e: 4.5
}]
期望得到的结果为 arr=[{s:7,e:24},{3,5}]
,意思就是在0时到24时只要包含于或者有共同区间的合并为一个对象。
这是我写的代码。。。。。。写的特别乱,想用冒泡来试试。结果千奇百怪,要么e 或者 s为undefind,要么出来的结果重复不按想的来,弄了三个小时了。求好心人指点指点。
解决方案
var arr = [{
s: 8,
e: 16
}, {
s: 17,
e: 23.5
}, {
s: 7,
e: 11
}, {
s: 23.5,
e: 24
}, {
s: 23.5,
e: 24
},{
s: 4,
e: 5
},{
s: 3,
e: 4.5
}];
arr.sort(function(a,b){
return a.s == b.s ? a.e - b.e : a.s - b.s
});
for(item of arr)console.log(item);
var result = [];
while(arr.length){
var obj = arr[0];
arr.splice(0,1);
for(var i = 0 ; i < arr.length ; i ++){
var cur = arr[i];
if(cur.s > obj.e){
result.push(obj);
break;
}else if(cur.e >= obj.e){
obj.e = cur.e;
arr.splice(i--,1);
}else{
arr.splice(i--,1);
}
}
}
result.push(obj);
console.log('============================')
for(item of result)console.log(item)
这篇关于javascript - 数组遍历,获得最终覆盖值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文