视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js常用代码段整理_javascript技巧
2020-11-27 21:01:32 责编:小采
文档


每段代码前边都有功能注解和参数要求等说明文字,难度不大也就没做更多注释。 为看得清楚,这里依先后顺序做个小目录:
重写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);

下载本文
显示全文
专题