/** * Created by bianxiaoling on 2018/9/7. */ //2 // 获取 url 中的参数 // 1. 指定参数名称,返回该参数的值 或者 空字符串 // 2. 不指定参数名称,返回全部的参数对象 或者 {} // 3. 如果存在多个同名参数,则返回数组 // 示例1 // 输入 // http://www.nowcoder.com?key=1&key=2&key=3 test=4#hehe // 输出 // [1, 2, 3] function getUrlParam(sUrl, sKey) { //#号后面的不截取通不过split("#") var oKey = sUrl.split("?")[1].split("#")[0].split("&"); var rObj = {}; for(var i = 0;i<oKey.length;i++){ var keyVal = oKey[i].split("="); if(!rObj[keyVal[0]] && rObj[keyVal[0]] !==""){ if(keyVal.length == 1 && oKey[i].indexOf("=") >0){ rObj[keyVal[0]] = ""; } else if(keyVal.length == 1 && oKey[i].indexOf("=") <0){ rObj[keyVal[0]] = undefined; } else{ rObj[keyVal[0]] = keyVal[1]; } } else { if(rObj[keyVal[0]] instanceof Array){ rObj[keyVal[0]].push(keyVal[1]); } else{ rObj[keyVal[0]] = [rObj[keyVal[0]]]; rObj[keyVal[0]].push(keyVal[1]); } } } if(!sKey){ return rObj; } else{ return rObj[sKey]?rObj[sKey]:""; } } console.log(getUrlParam("http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe"));//{key:["1","2","3"],test:"4"} //3 // 查找两个节点的最近的一个共同父节点,可以包括节点自身 // 输入描述: // oNode1 和 oNode2 在同一文档中,且不会为相同的节点 function commonParentNode(oNode1, oNode2) { if(oNode1.contains(oNode2)){ return oNode1; }else{ return commonParentNode(oNode1.parentNode,oNode2); } } //4 // 根据包名,在指定空间中创建对象 // 输入描述: // namespace({a: {test: 1, b: 2}}, 'a.b.c.d') // 输出描述: // {a: {test: 1, b: {c: {d: {}}}}} function namespace(oNamespace, sPackage) { var arr = sPackage.split('.'); var res = oNamespace; // 保留对原始对象的引用 for(var i = 0, len = arr.length; i < len; i++) { if(arr[i] in oNamespace) { // 空间名在对象中 if(typeof oNamespace[arr[i]] !== "object") { // 为原始值 oNamespace[arr[i]] = {}; // 将此属性设为空对象 } } else { // 空间名不在对象中,建立此空间名属性,赋值为空 oNamespace[arr[i]] = {}; } oNamespace = oNamespace[arr[i]]; // 将指针指向下一个空间名属性。 } return res; } console.log(namespace({a: {test: 1, b: 2}}, 'a.b.c.d')); //5 // 为 Array 对象添加一个去除重复项的方法 // 示例1 // 输入 // [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN] // 输出 // [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a'] Array.prototype.uniq = function () { var rem = [], flag = true;//NaN=存在的标志 for(var i=0;i<this.length;i++){ if(rem.indexOf(this[i]) == -1){ if(this[i] != this[i]){//NaN if(flag){ rem.push(this[i]); flag = false; } } else{ rem.push(this[i]); } } } return rem; } console.log([false,false, true, undefined, undefined,null, null,NaN, 0, 1, {}, {}, 'a', 'a', "b","b",NaN]); console.log([false,false, true, undefined, undefined,null, null,NaN, 0, 1, {}, {}, 'a', 'a', "b","b",NaN].uniq()); //6 // 按所给的时间格式输出指定的时间 // // 格式说明 // 对于 2014.09.05 13:14:20 // yyyy: 年份,2014 // yy: 年份,14 // MM: 月份,补满两位,09 // M: 月份, 9 // dd: 日期,补满两位,05 // d: 日期, 5 // HH: 24制小时,补满两位,13 // H: 24制小时,13 // hh: 12制小时,补满两位,01 // h: 12制小时,1 // mm: 分钟,补满两位,14 // m: 分钟,14 // ss: 秒,补满两位,20 // s: 秒,20 // w: 星期,为 ['日', '一', '二', '三', '四', '五', '六'] 中的某一个,本 demo 结果为 五 // // 示例1 // 输入 // formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w') // 输出 // 2014-09-05 13:14:20 星期五 //7 // 如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1 // 否则如果字符 Unicode 编码 > 255 则长度为 2 // // 示例1 // 输入 // 'hello world, 牛客', false // 输出 // 17 function strLength(s, bUnicode255For1) { var len = s.length; if(bUnicode255For1) return len; else{ for(var i=0; i<s.length;i++){ if(s.charCodeAt(i)>255){ len++; } } return len; } } console.log(strLength('hello world, 牛客', false)); //8. // 判断输入是否是正确的邮箱格式 // 输入描述: // 邮箱字符串 // 输出描述: // true表示格式正确 function isAvailableEmail(sEmail) { var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/; return reg.test(sEmail); } console.log(isAvailableEmail("419209374@qq.com")); // 9 // 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff // 1. rgb 中每个 , 后面的空格数量不固定 // 2. 十六进制表达式使用六位小写字母 // 3. 如果输入不符合 rgb 格式,返回原始输入 // // 示例1 // 输入 // 'rgb(255, 255, 255)' // 输出 // #ffffff function rgb2hex(sRGB) { } //10 // css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能 // 1. 以 - 为分隔符,将第二个起的非空单词首字母转为大写 // 2. -webkit-border-image 转换后的结果为 webkitBorderImage // // 示例1 // 输入 // 'font-size' // 输出 // fontSize function cssStyle2DomStyle(sName) { //判断字符串sName[0]是否为"-" if(sName.indexOf("-") == 0){ sName = sName.substring(1); } var rem = sName.split("-"),newRem = []; for(var i=1;i<rem.length;i++){ newRem.push(rem[i].slice(0,1).toUpperCase() +rem[i].slice(1)); } newRem.unshift(rem[0]); return newRem.join(""); } console.log(cssStyle2DomStyle('font-size-ddd-sdd')); //11 // 统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率 // 1. 不限制 key 的顺序 // 2. 输入的字符串参数不会为空 // 3. 忽略空白字符 // // 示例1 // 输入 // 'hello world' // 输出 // {h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1} function count(str) { var rObj = {}; for(var i=0;i<str.length;i++){ if(str[i] in rObj){ rObj[str[i]]++; } else{ rObj[str[i]] = 1; } } return rObj; } console.log(count('hello world'));