当前位置:编程学习 > JS >>

Javascript 为什么要用权重算法

《JavaScript开发王》第十三张的一个关于广告随机滚动出现的例子,用到一个权重算法,上面解释的不是很清楚,请问什么是权重算法?为什么要用权重算法?用过这本书的朋友觉得这本书好吗?为什么?最好能对下面这段代码中的权重算法解释一下或举个再简单点的例子:

<script type="text/javascript">
<!--
//定义一个基准URL地址
var baseURL = "http://myhost/ads/";
//我们使用一个二维数组来防止所有的广告图片,格式是:["URL",权重]
var ads = new Array(["pic/image1.jpg",20],
["pic/image4.jpg",10],
["pic/image2.jpg",20],
["pic/image3.jpg",40]);
//根据权重来重新排列数组元素,权重越大,越位于后面
var sortFn = function(a,b){
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
if (a[1] == b[1]) return 0;
}
ads.sort(sortFn);
//获得权重总数,以变量allWeight标示
//然后根据总数产生一个0-allWeight之间的随机数
var allWeight=0;
for (var i=0; i<ads.length;i++) {
allWeight += ads[i][1];
}
//变量currWeight便是当前的随机数
var currWeight = Math.round(Math.random()*(allWeight+1)+1);
var currURL;
//下面我们为每个广告图片定义一个权重的范围
//改变权重的值,让其等于范围的结束数量,
//那么开始数量便是前一个权重轻的广告图片的范围的结束数量
var minR = 0;
var maxR = 0;
for (var i=0; i<ads.length;i++) {
minR = maxR;
maxR += ads[i][1];
ads[i][1] = maxR;
}
//然后我们就可以将当前随机数与权重范围进行匹配,获得一个广告图片的URL
for (var i=0; i<ads.length;i++) {
//当前随机数为allWeight时是一个特例,我们单独计算
if(currWeight==allWeight){
currURL = ads[ads.length-1][0];
}
if(i!=0){
if(currWeight>=ads[i-1][1]&&currWeight<ads[i][1]){
currURL = ads[i][0];
}
}else{
//权重最低的第一个广告是一个特例,我们单独计算
if(currWeight>=0&&currWeight<ads[0][1]){
currURL = ads[0][0];
}
}
}
//获取广告图片要放置的div元素,然后为其赋值
var oAdContainer = document.getElementById("adContainer");
oAdContainer.innerHTML = '<img src="' + currURL + '" />';
//在最终发布时别忘了加上基准URL
//oAdContainer.innerHTML = '<img src="' + baseURL + currURL + '" />';
-->
</script>

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,