1.根据包名,在指定空间中创建对象:
输入: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;
}
2.为 Array 对象添加一个去除重复项的方法
Array.prototype.uniq = function () {
var arr=[];
var flag=true;
this.forEach(function(item){
if(arr.indexOf(item)==-1){
if(item!=item){ //排除NaN
if(flag){
arr.push(item);
flag=false;
}
}else{
arr.push(item);
}
}
})
return arr;
}
3.如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1
否则如果字符 Unicode 编码 > 255 则长度为 2
function strLength(s, bUnicode255For1) {
if(bUnicode255For1){
return s.length;
}else{
var l=s.length;
for(var i=0;i<s.length;i++){
if(s.charCodeAt(i)>255){
l++;
}
}
return l;
}
}
4.统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
1. 不限制 key 的顺序
2. 输入的字符串参数不会为空
3. 忽略空白字符
function count(str) {
var obj = {};
str.replace(/\S/g,function(s){ //\S匹配非空字符串,s为匹配到的每一项
!obj[s]?obj[s]=1:obj[s]++;
})
return obj;
}
function count(str) {
var res={};
for(var i=0; i<str.length; i++){
if(str.charAt(i) in res)
res[str.charAt(i)]++;
else
res[str.charAt(i)] = 1;
}
return res;
}