js前端面试题(每日两道2)

1.判断两个矩形是否重叠

用一个对象的数据来表示一个矩形的位置和大小:

{x:100,y:100,width:150,height:250}

它表示一个宽为 150 高为 250 的矩形在页面上的 (100, 100) 的位置。

请你完成一个函数 isOverlap 可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。

答案:

constrect1 = {x:100,y:100,width:100,height:100}

constrect2 = {x:150,y:150,width:100,height:100}

isOverlap(rect1, rect2)// => true

const isOverlap = (rect1, rect2) => {

    let rect1Xmax=rect1.x+rect1.width;

    let rect1Ymax=rect1.y+rect1.height;

    let rect2Xmax=rect2.x+rect2.width;

    let rect2Ymax=rect2.y+rect2.height;

    if(rect1.x        if(rect1.y            return true;
        }
         return false;
    }
     return false;
}

2.safeGet

有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:

var data = {a: {b: {c:'ScriptOJ'} } }

data.a.b.c// => scriptoj

data.a.b.c.d// => 报错,代码停止执行

console.log('ScriptOJ')// => 不会被执行

请你完成一个 safeGet 函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回 undefined,例如:

var data = {a: {b: {c:'ScriptOJ'} } }

safeGet(data,'a.b.c')// => scriptoj

safeGet(data,'a.b.c.d')// => 返回 undefined

safeGet(data,'a.b.c.d.e.f.g')// => 返回 undefined

console.log('ScriptOJ')// => 打印 ScriptOJ

答案

const safeGet = (data, path) => {

    if(!path) return undefined;

    var arr = path.split(".");

    try{

        while(arr.length){

        data = data[arr.shift()];

        }

    }catch(err){

        return undefined;

    }

    return data;

}

你可能感兴趣的:(js前端面试题(每日两道2))