搬运整理牛客网中的题,不知道算不算抄袭……如果有冒犯到任何人的话请联系我 ^^
获取 url 参数
描述
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
- 不支持URLSearchParams方法
示例
输入:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:[1, 2, 3]
题解中的答案
function getUrlParam(sUrl, sKey) {
let arr = sUrl.split("?")[1].split("#")[0].split("&"), obj={
};
arr.forEach(item=>{
let [key, value] = item.split("=");
if(key in obj){
//已存在同名参数
obj[key] = [].concat(obj[key], value);//通过数组存起来
}else{
//第一次遍历这个元素
obj[key] = value//直接添加到对象上面
}
})
return sKey ? obj[sKey] || "" : obj;
}
dom 节点查找
描述
查找两个节点的最近的一个共同父节点,可以包括节点自身
oNode1 和 oNode2 在同一文档中,且不会为相同的节点
题解的答案
判断一个节点以及它的父节点是否包含另一个节点
//从一个结点出发
function commonParentNode(oNode1, oNode2) {
while(true){
oNode1 = oNode1.parentNode;
if(oNode1.contains(oNode2)){
return oNode1;
}
}
}
//从两个结点一起出发
function commonParentNode(oNode1, oNode2) {
while(true){
oNode1=oNode1.parentNode;
if(oNode1.contains(oNode2)){
return oNode1;
}
oNode2=oNode2.parentNode;
if(oNode2.contains(oNode1)){
return oNode2;
}
}
}
递归
function commonParentNode(oNode1, oNode2) {
oNode1=oNode1.parentNode;
oNode2=oNode2.parentNode;
if(oNode1==oNode2){
return oNode1;
}
commonParentNode(oNode1,oNode2);
}
根据包名,在指定空间中创建对象
描述
根据包名,在指定空间中创建对象
示例
输入namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
输出{a: {test: 1, b: {c: {d: {}}}}}
题解的答案
当空间中包含对象时(如a:{test:1})则保留此对象;
当包含内容不是对象时(如b:2),则将其设置为一个空对象。
function namespace(oNamespace, sPackage) {
let namespace=oNamespace;
let arr=sPackage.split('.');
for(let i=0 ; i<arr.length ; i++){
namespace[arr[i]]=typeof(namespace[arr[i]])=='object'?namespace[arr[i]]:{
};
namespace=namespace[arr[i]];
}
return namespace;
}
数组去重
描述
为 Array 对象添加一个去除重复项的方法
示例
输入:[false, true, undefined, null, NaN, 0, 1, {
}, {
}, 'a', 'a', NaN]
输出:[false, true, undefined, null, NaN, 0, 1, {
}, {
}, 'a']
题解答案
===: NaN != NaN
set: NaN = NaN
{} != {},+0=-0
Array.prototype.uniq = function () {
return Array.from(new Set(this))//Set只是类似数组,要用Array.from返回一个真正的数组
}
时间格式化输出
示例
输入:formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
输出:2014-09-05 13:14:20 星期五
题解答案
function formatDate(t,str){
var obj = {
yyyy:t.getFullYear(),
yy:(""+ t.getFullYear()).slice(-2),
M:t.getMonth()+1,
MM:("0"+ (t.getMonth()+1)).slice(-2),
d:t.getDate(),
dd:("0" + t.getDate()).slice(-2),
H:t.getHours(),
HH:("0" + t.getHours()).slice(-2),
h:t.getHours() % 12,
hh:("0"+t.getHours() % 12).slice(-2),
m:t.getMinutes(),
mm:("0" + t.getMinutes()).slice(-2),
s:t.getSeconds(),
ss:("0" + t.getSeconds()).slice(-2),
w:['日', '一', '二', '三', '四', '五', '六'][t.getDay()]
};
return str.replace(/([a-z]+)/ig,function($1){
return obj[$1]})