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<rect2.x&&rect2.x<rect1Xmax||rect2.x<rect1.x&&rect1.x<rect2Xmax){
if(rect1.y<rect2.y&&rect2.y<rect1Ymax||rect2.y<rect1.y&&rect1.y<rect2Ymax) {
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;
}
网友评论