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

推荐订阅源

博客园_首页
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
Y
Y Combinator Blog
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
S
SegmentFault 最新的问题
IT之家
IT之家
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
WordPress大学
WordPress大学
博客园 - Franky
L
LangChain Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
博客园 - 叶小钗
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
雷峰网
雷峰网
腾讯CDC
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Help Net Security
Help Net Security
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Schneier on Security
Schneier on Security
博客园 - 聂微东
A
Arctic Wolf
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google DeepMind News
Google DeepMind News

博客园 - 匆匆

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);