javascript - 数组遍历,获得最终覆盖值

查看:104
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆