JavaScript編程題(六)

題1將 rgb 顏色字符串轉換爲十六進制的形式,如 rgb(255, 255, 255) 轉爲 #ffffff
1. rgb 中每個 , 後面的空格數量不固定
2. 十六進制表達式使用六位小寫字母
3. 如果輸入不符合 rgb 格式,返回原始輸入

方法1:1)判斷 參數是否符合 rgb 格式,不符合直接return;2)去除參數 中每個 , 後面的空格;3)16進制轉10進制,使用num.toString( radix ); 4)注意16進制只有1位的情況,前面要補0;

主要知識點:16進制轉10進制使用num.toString( radix ),radix 是數字的基數,範圍是 2 ~ 36 (包括)。

有關顏色相關知識:https://blog.csdn.net/start_XUEBA/article/details/88747594

function rgb2hex(sRGB) {
    let reg = /^rgb\(([1-2]?[0-5]?[0-5],){2}[1-2]?[0-5]?[0-5]\)$/;
    if(!reg.test(sRGB)){
        return sRGB;
    }
    let rgb = sRGB.split(",").map(item=>item.trim()).join(",");
    let str = "";
    //2 16進制轉10進制
    for(var i=0;i<3;i++){
        var s = ( +/\d{1,3}/.exec(rgb) ).toString(16);
        str+=s.length===1 ? "0"+s:s;
        rgb=rgb.slice(rgb.indexOf(",")+1)
    }
    return "#"+str;
}

方法二:記錄一下別人的方法。(這裏rgb格式判斷不嚴謹,參考思路即可。)

主要知識點:replace,捕獲組,num.toString( radix );

function rgb2hex(sRGB) {
   return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(a, r, g, b){
       return '#' + hex(r) + hex(g) + hex(b);
   });
}
function hex(n){
    return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}

題2找出對象 obj 不在原型鏈上的屬性
1、返回數組,格式爲 key: value
2、結果數組不要求順序

方法一:遍歷obj對象的屬性,如果該屬性不是原型鏈上的,則在數組中添加;

知識點:

1)for (a in obj):遍歷的可枚舉屬性,如果屬性加在原型對象上也會遍歷出來。另外:a是屬性,不是值,獲取值是obj[a]。

 

2)obj.hasOwnProperty("val") : 是用來判斷一個對象是否有給出名稱的屬性或對象。此方法無法檢查該對象的原型鏈中是否具有該屬性,該屬性必須是對象本身的一個成員。

 

function iterate(obj) {
    let arr=[];
    for (var i in obj){
        if(obj.hasOwnProperty(i)){
            arr.push(i+": "+obj[i]);
        }
    }
    return arr;
}

 

方法二:記錄一下大佬的方法。(我什麼時候才能如此優秀( ; ^ ; )~~~)

知識點:Object.getOwnPropertyNames()方法返回一個由指定對象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作爲名稱的屬性)組成的數組。

 

function iterate(obj) {
    return Object.getOwnPropertyNames(obj).map(function(key){
        return key+": "+obj[key];
    });
}

 

發佈了45 篇原創文章 · 獲贊 3 · 訪問量 7300
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章