js常用代码段收集


Posted in Javascript onOctober 28, 2011

每段代码前边都有功能注解和参数要求等说明文字,难度不大也就没做更多注释。 为看得清楚,这里依先后顺序做个小目录:
重写window.setTimeout,
理解递归程序的返回规律,
截取长字符串,
取得元素在页面中的绝对位置,
统计、去除重复字符(多种方法实现),
把有序的数组元素随机打乱(多种方法实现)。

/* 
功能:修改 window.setTimeout,使之可以传递参数和对象参数 (同样可用于setInterval) 
使用方法: setTimeout(回调函数,时间,参数1,...,参数n) (FF已经原生支持,IE不支持) 
*/ 
var __sto = setTimeout; 
window.setTimeout = function(callback,timeout,param){ 
var args = Array.prototype.slice.call(arguments,2); 
var _cb = function(){ 
callback.apply(null,args); 
} 
__sto(_cb,timeout); 
} 
function aaaaa(a,b,c){ 
alert(a + b + c); 
} 
window.setTimeout(aaaaa,2000,5,6,7); /**//* 
功能:理解递归程序的返回规律(从内到外) 
对象之间成员的互引用 
*/ 
var ninja = { 
yell: function(n){ 
return n > 0 ? ninja.yell(n-1) + "a" : "hiy"; 
} 
}; 
alert(ninja.yell(4))//结果为:hiyaaaa; 
var samurai = { yell: ninja.yell }; 
//var ninja = {}; // 此处 注释与否 对结果有影响 
try { 
alert(samurai.yell(4)); 
} catch(e){ 
alert("Uh, this isn't good! Where'd ninja.yell go?" ); 
} 
/** 功能:截取长字符串 
* @param {string} str 要截取的字符串 
* @param {number} size 截取长度(单字节长度) 
*/ 
var subStr = function(str, size){ 
var curSize = 0, arr = []; 
for(var i = 0, len = str.length; i < len; i++){ 
arr.push(str.charAt(i)); 
if (str.charCodeAt(i) > 255){ 
curSize += 2; 
if(size === curSize || size === curSize - 1){ 
return arr.join(''); 
} 
}else{ 
curSize++; 
if(size === curSize){ 
return arr.join(''); 
} 
} 
} 
}; 
var str = '#%*……&#什么东西1234abcd 还不够长'; 
alert(str.length); 
alert(str.substr(0, 15)); 
alert(subStr(str, 15)); 
/**//* 
功能:取得元素在页面中的绝对位置(相对于页面左上角) 
@param {string} node 待求位置的DOM元素 
*/ 
function getAbsPosition(node) { 
var t = node.offsetTop; 
var l = node.offsetLeft; 
while (node = node.offsetParent) { 
t += node.offsetTop; 
l += node.offsetLeft; 
} 
alert("top=" + t + "\n" + "left=" + l); 
} 
/**//* 
功能:统计、去除重复字符 
@param str 需要统计的字符串 
说明:常用于字符串中重复字符,或者数组中重复的字母、数字等个数统计。 
此处从网上收集两种典型的类型,分别有两种实现方法,其他还有许多变种,从不同角度编写,可搜索学习。 
待统计的数据,不论是数组和字符串都可以,只用借助String.split()或 Array.join() 
转换为函数参数要求的类型即可。 
*/ 
// 类型一:借助新建对象来保存数据 
var count1 = function (str) { 
var map = {}, maxCount = 0, maxChar, undefined, i = str.length; 
while (i--) { 
var t = str.charAt(i); 
map[t] == undefined ? map[t] = 1 : map[t] += 1; 
if (map[t] > maxCount) { 
maxChar = t; 
maxCount = map[maxChar]; 
} 
} 
return "字符:" + maxChar + "次数:" + maxCount; 
} 
function s_0(a) { // 此处参数应为数组类型 
var b = {}, c = [], i; 
for (i = 0; i < a.length; i++){ 
if (!b[a[i]]) { 
c[c.length] = a[i], b[a[i]] = true; 
} 
} 
return c; 
} 
// 类型二:正则表达式匹配统计 
var count2 = function (str) { 
var most = str.split('').sort().join('').match(/(.)\1*/g); //排列重复字符 
most = most.sort(function (a, b) { return a.length - b.length }).pop(); //按出现频繁排序 
return most.length + ': ' + most[0]; 
} 
function s_1(a) { 
var a = a.join(""), b = []; 
while (a.length > 0) 
a = a.replace(new RegExp((b[b.length] = a.charAt(0)), "g"), ""); 
return b; 
} 
/**//* 
功能:把有序数组打乱(产生无序随机数组) 
说明:基本的排序算法大家应该都很清楚。但是在编程中也经常用到相反的操作,即把原来有序的数组元素随机打乱。 
以下给出三种方法,第一种是以前我自己写出来的,由于水平差,写出的代码时间复杂度太大, 
于是从网上搜索一些简单而且效率高的方法来。 
第二种据说是“洗牌算法”,想必很多人都听说过; 
第三种是利用JS的内置sort方法,这种实现起来很简单。 
*/ 
// 方法1(给大家做失败的教训借鉴) 
function randArray(num) { 
var rands = []; 
var ra = parseInt(num * Math.random()); 
rands.push(ra); 
for (var r = 0; r < num - 1; r++) { 
ra = parseInt(num * Math.random()); 
for (var m = 0; m < rands.length; m++) { 
while (rands[m] == ra) { 
ra = parseInt(num * Math.random()); 
m = -1; 
} 
} 
rands.push(ra); 
} 
//alert(rands); 
return rands; 
} 
// 方法2: 
//选择两个[0...array.Length)之间的随机数,把它们做下标的两个元素交换位置(这样乱序效率高) 
/* 说明:这是“洗牌算法” 有人证明打乱的效果如下: 
随机交换nums/2次的效果很差,平均约1/3的对象还在原来的位置 
随机交换nums次才基本可用,平均约15%的对象还在原来的位置 
随机交换nums*2次才真正可用,平均约2%的对象还在原来的位置 
*/ 
function daluan(nums) { 
var array=[]; 
for (var i = 0; i < nums; i++) { 
array[i] = i; 
} 
for (var i = 0; i < nums; i++) { 
var rand = parseInt(nums * Math.random()); 
var temp = array[i]; 
array[i] = array[rand]; 
array[rand] = temp; 
} 
return array; 
} 
// 方法3: 
// 让比较函数随机传回-1或1就可以了(这样乱序效率可能不高) 
var testArray3=[1,2,3,4,5,6,7,8,9,10,22,33,55,77,88,99]; 
testArray3.sort(function(){return Math.random()>0.5?-1:1;}); 
alert(testArray3);
Javascript 相关文章推荐
收藏一些不常用,但是有用的代码
Mar 12 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
Sep 11 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
Dec 18 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
Jan 19 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
JavaScript 继承详解(五)
Oct 11 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
Jun 24 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
微信小程序入门之指南针
Oct 22 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 #Javascript
理解JSON:3分钟课程
Oct 28 #Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 #Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 #Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 #Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 #Javascript
input 和 textarea 输入框最大文字限制的jquery插件
Oct 27 #Javascript
You might like
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
基于文本的搜索
2006/10/09 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
vue实现计步器功能
2019/11/01 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
Python多线程实例教程
2014/09/06 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
执行总经理岗位职责
2014/02/03 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
2014个人年度工作总结
2014/12/15 职场文书
大国崛起观后感
2015/06/02 职场文书