題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];
});
}