1.判斷兩個(gè)矩形是否重疊
用一個(gè)對象的數(shù)據(jù)來表示一個(gè)矩形的位置和大小:
{x:100,y:100,width:150,height:250}
它表示一個(gè)寬為 150 高為 250 的矩形在頁面上的 (100, 100) 的位置帅掘。
請你完成一個(gè)函數(shù)?isOverlap?可以接受兩個(gè)矩形作為參數(shù)汗侵,判斷這兩個(gè)矩形在頁面上是否重疊迫像。
答案:
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
有時(shí)候我們需要訪問一個(gè)對象較深的層次徘溢,但是如果這個(gè)對象某個(gè)屬性不存在的話就會報(bào)錯(cuò)宛畦,例如:
var data = {a: {b: {c:'ScriptOJ'} } }
data.a.b.c// => scriptoj
data.a.b.c.d// => 報(bào)錯(cuò)具被,代碼停止執(zhí)行
console.log('ScriptOJ')// => 不會被執(zhí)行
請你完成一個(gè)?safeGet?函數(shù)纬纪,可以安全的獲取無限多層次的數(shù)據(jù)蚓再,一旦數(shù)據(jù)不存在不會報(bào)錯(cuò),會返回?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;
}