惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
A
About on SuperTechFans
量子位
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog
U
Unit 42
D
DataBreaches.Net
博客园 - Franky
D
Docker
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog

博客园 - 匆匆

Grunt常见问题 一个小型的类库 JavaScript 设计模式 HTML5常见问题 改版提示,新手指南 前端开发规范文档 常用正则表达式 JavaScript String 对象扩展方法 JavaScript String 对象常用方法 JavaScript Array 对象扩展方法 JavaScript Array 对象常用方法 JavaScript 常见基础问题一 JavaScript与网页性能 跨浏览器的本地存储解决方案 页面中添加事件、阻止事件传播、事件删除 常用CSS书写技巧 Gridview用法大总结(牛年珍藏版) 总结一些常用功能源码 JS类库
JavaScript 常见基础问题二
匆匆 · 2012-05-25 · via 博客园 - 匆匆

1、判断一个字符串中出现次数最多的字符,统计这个次数

var str = "ababccddabbb"; 
var obj = {}; 
for (var i = 0; i < str.length; i++) { 
    var key = str.charAt(i); 
    if (!!obj[key]) { 
       obj[key]++; 
    } 
    else { 
       obj[key] = 1; 
    } 
} 
console.log(obj); 
var max = -1, max_key = "", key; 
for (key in obj) { 
    if (max < obj[key]) { 
       max = obj[key]; 
       max_key = key; 
    } 
} 
console.log(max_key + ":" + max);

2、截取字符串abcdefg的efg

var str = "abcdefg";
var subStr="";
if (/efg/.test(str)) {
    subStr=str.substr(str.indexOf("efg"),3);
}
console.log(subStr);

3、求一个字符串的字节长度(一个英文字符占用一个字节,一个中文字符占用两个字节)

function getBytes(str) {
    var len = str.length;
    var bytes = len;
    for (var i = 0; i < len; i++) {
        if (str.charCodeAt(i) > 255) {
            bytes++;
        }
    }
    return bytes;
}
console.log(getBytes("您好,hello"));

4、assert判断类型

var assert = {
    isBoolean: function (G) {
        return (typeof G === "boolean");
    },
    isNumber: function (G) {
        return (typeof G === "number" && isFinite(G));
    },
    isString: function (G) {
        return (typeof G === "string" || G.constructor == String);
    },
    isFunction: function (G) {
        var A = {};
        return (A.toString.apply(G) === A.toString.apply(Function));
    },
    isArray: function (G) {
        return Object.prototype.toString.call(G) === "[object Array]";
    },
    isObject: function (G) {
        return (G && (typeof G === "object" || this.isFunction(G)) || false);
    }
};

5、深度克隆对象

基本类型(包括undefined,Null,boolean,String,Number),按值传递;
引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内存中的地址。例如:
var a = { "id": 1 };
var b = a;
b["name"] = 2;
console.log(a); //{id: 1, name: 2}
如果你修改b的值,那么a变量的值也发生了变化。
克隆分为2种:
A、浅度克隆:基本类型为值传递,对象仍为引用传递。
B、深度克隆:所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。
深度克隆对象代码:
function cloneObject(obj) {
    var o = obj.constructor === Array ? [] : {};
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            o[i] = typeof obj[i] === "Object" ? cloneObject(obj[i]) : obj[i];
        }
    }
    return o;
}
如果是一个简单的数组,元素中没有引用类型的值,可以直接用array.concat();或者array.slice(0);来深度拷贝一个数组,这样简单又高效。数组的concat()和slice()本来就会生成一个新的数组,原来的数组不会受影响。

6、冒泡排序算法?

function bubbleSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len - 1; i += 1) {
        for (var j = 0; j < len - i - 1; j += 1) {
            if (arr[j + 1] < arr[j]) {
                var temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
var arr = [-1, -5, 0, 300, 90, 90, -5];
bubbleSort(arr);
console.log(arr);

 7、获取对象,数组所有属性值(key)和对应值(value)

(function ($) {
    window.Util = window.Util || {};
    Util.getObjectKeys = function (o) {
        var keys = [];
        if (typeof o == "object") {
            for (var property in o) {
                keys.push(property);
            }
        }
        return keys;
    };
    Util.getObjectValues = function (o) {
        var values = [];
        if (typeof o == "object") {
            for (var property in o) {
                values.push(o[property]);
            }
        }
        return values;
    };
})(window.jQuery);

 8、获取字符串中特定字符出现的次数

var str = '数码,女装,虚拟';
var arr = str.match(/\,/gi);
var items = arr == null ? 0 : arr.length; // 方法1
var items = str.split(',').length - 1; // 方法2
console.log(items);