JS产生徐特尔图表

徐特尔图表是一个小游戏,在5*5的格子上,无序的写着1~25这25个数子,然后再找出来。其实在JS中也就是将25个数进行随机产生然后放到一个表格中。主要分为两部分,一是随机数的产生,还有一部分就是表格的创建。

创建表格

 1     //拿到页面上用于放表格的容器DIV
 2     var div = document.getElementById(‘box‘);
 3     //创建一个表格
 4     var tb = document.createElement(‘table‘);
 5     tb.width="150";
 6     tb.border = ‘1‘;
 7     tb.style.textAlign = ‘center‘;
 8     tb.style.cssFloat = ‘left‘;
 9     //调用外部的随机数产生函数,返回一个存放无序的1~25的随机数组
10     var nums = getRandomNum();
11     for(var i=0; i<5; i++){
12         var tr = document.createElement(‘tr‘);
13         //将每一行的td用字符串给拼接起来
14         var td = nums.slice(i*5,i*5+4).join(‘</td><td>‘);
15         //设置行的innerHTML,也就是添加列
16         tr.innerHTML = ‘<td>‘ + td +‘</td>‘;
17         tb.appendChild(tr);
18     };
19     div.appendChild(tb);

创建表格

表格的创建相对比较简单,主要还是在随机数的创建上,下面提供我想到的几种创建随机数的方式

产生随机数

方式一:while + for

外层一个while循环,判断数组的长度是否是25,里面没产生一个随机数就用for遍历一次当前的数组中是否有这个数,如果没有就添加,有就不添加。比较容易理解

    function getRandomNum(){
        var nums = [];
        var flag=true;//标识位
        //参数25个随机数
        while(nums.length<25){
            flag=true;
            var num = Math.floor(Math.random()*25)+1;
            for(var i=0;i<nums.length;i++){
                if(num == nums[i]){
                    flag=false;
                    break;
                }
            };
            if(flag){
                nums.push(num);
            };
    }

方式一代码

方式二:while + for + for

这种方式其实和上面的方式一差不多,不过while循环的时候减半,而且在随机数的参数上也减半。

随机数1~25首位相加,得到的都是数字26,所以我们可以只是产生1~13的随机数,然后再通过26去减去产生的随机数就可以得到剩下的数字

 1     function getRandomNum(){
 2         var nums2=[];
 3         var flag=true;
 4         while(nums2.length<13){
 5             flag=true;
 6             var num = Math.floor(Math.random()*13) + 1;
 7             for(var i=0;i<nums2.length;i++){
 8                 if(nums2[i] == num){
 9                         flag = false;
10                         break;
11                 }
12             }
13             if(flag){
14                     nums2.push(num);
15             }
16         }
17         //遍历数组中的数,随机添加后半部分
18         for(var j=0;j<13;j++){
19             if(nums2[j] == 13){
20                 continue;
21             }
22         //    nums2.push(26-nums2[j]);    //这种方式的不好的就是知道前面的13个数子就能够找出对应的后面的数子
23             nums2.splice(Math.floor(Math.random()*(nums2.length-13))+13,0,26-nums2[j]);
24         };

方式二

这种方式在while循环中参数随机数的次数是少了,但是问题就是前半部分都是1~13后半部分是14~25,当然可以该进一下,再用一个数组,然后循环已经存放数据的数组,把数据都随机插入到另外一个空数组中

方式三:for + for

已经知道数组里面存放的是1~25的随机数,内容已经知道,只是需要改变顺序,那就可以先顺序初始化这个数组,然后再改变它的每一项的索引

 1     function getRandomNum(){
 2         var nums = [];
 3         for(var i=1;i<26;i++){
 4              nums.push(i);
 5         };
 6         for(var i=0;i<nums.length;i++){  //可以只是循环13次就差不多了。
 7             //先把数组中最后一个数给拿出来,然后随机插入到之前的位置
 8             nums.splice(Math.floor(Math.random()* nums.length),0,nums.pop());
 9         }
10         return nums;
11     };

方式四:for

从方式三知道,反正每一个数据都需要重新的排序,那就没有比较的去初始化之前的数据了,直接在插入的时候,顺序的插入循环变量i就可以了

1     function getRandomNum(){
2         var nums = [];
3         for(var i=0; i<26; i++){
4             //将循环变量i随机的插入到某个位置
5             nums.splice(Math.floor(Math.random() * (nums.length+1)), 0, i);
6         }
7         return nums;
8     };

第四中方式,可以看出是第三种方式的一个升级而已。还有一种思路就是,在方式三的基础上不改变每一个数据的索引,而是在创建表格的时候,通过循环创建每一个单元格,再随机的从其中抽取一个数据将它填充到单元格中,然后再把这个数从数组中移除掉。这种思路就是在创建表格的时候要循环25次,从循环的次数上来讲都差不多

时间: 2024-10-10 18:57:40

JS产生徐特尔图表的相关文章

[3] 用D3.js做一个简单的图表吧!

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下

JS插件:ECharts-数据图表化

一.官网 官网: http://www.echartsjs.com/ 上手:http://www.echartsjs.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts 二.例子 实例: 1. 先引入:echarts.common.min.js /或者: echarts.js 1 <head> 2 <meta charset="utf-8"> 3 <title>EC

JS插件:ECharts-数据图表化-事件

主要内容: tooltip.formatter / events.legendselectchanged 一.折线图 echart官网 1. 先引入:echarts.common.min.js /或者: echarts.js 2. 为ECharts准备一个具备大小的DIV容器 3. js:设置参数初始化图表 1 <head> 2 <meta http-equiv="content-type" content="text/html; charset=UTF-8

D3.js 做一个简单的图表!

柱形图是一种最简单的可视化图标,主要有矩形.文字标签.坐标轴组成.本文为简单起见,只绘制矩形的部分,用以讲解如何使用 D3 在 SVG 画布中绘图. 一. 画布是什么 前几章的处理对象都是 HTML 的文字,没有涉及图形的制作. 要绘图,首要需要的是一块绘图的“画布”. HTML 5 提供两种强有力的“画布”:SVG 和 Canvas. 1.1. SVG 是什么 SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定

Vis.js图表插件

Vis.js是一款基于JavaScript的可视化图表库,Vis.js不像其他的图表库那样仅仅支持几种常用的数据图表,比如线形图.柱状图.饼图等,Vis.js支持上百种不同类型的可视化图表类型,比如时间线图.网络图.2D图表.3D图表,每一种类型的图表下又包含几十种不同展现方式的数据图表. 更为让人震撼的是,Vis.js图表都是动态的,也就是说你可以拖动每一个数据节点来让图表数据进行动态排列. Vis.js时间线图的效果图 Vis.js网络图效果图: Vis.js 2D图表效果图: Vis.js

可能是史上最强大的js图表库——ECharts带你入门

PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?>简单了解了一下之后,ECharts很快吸引了我.里面引自马云的那句话“互联网还没有搞清楚的时候,移动互联网来了,移动互联没有搞清楚的时候,大数据来了”我是第一次听到,实在震撼了我啊(孤陋寡闻...). 本来没打算写什么的.可是作为一个后端开发者,看了半天文档也迷迷糊糊,查了一堆资料也没搞懂Echarts那

介绍一个!非常简单非常方便!制作图表报表的js库 —— ichartjs 【详细操作】

ichartjs是一个国产的图表库,提供各种api,以及多种样式的图表 图表包括:面积图.2d条形图.2d柱状图.3d柱状图.折线图.饼状图等,并且可以组合图形. ichart是一个轻量级的js组件,快速构建图表并可跨平台使用 这是ichart的案例展示图,在这个页面我们通过点击view code 查看当前图表调用api的方法 ichart官网api的说明使用的参考文档 一个简单的例子熟悉一下ichart.js 1.通过官网我们去下载一个最新版本的ichart(文章最后有链接) 2.在解压的根目

史上最强大的js图表库——ECharts带你入门(转)

出处:http://www.cnblogs.com/zrtqsk/p/4019412.html PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?>简单了解了一下之后,ECharts很快吸引了我.里面引自马云的那句话“互联网还没有搞清楚的时候,移动互联网来了,移动互联没有搞清楚的时候,大数据来了”我是第一次听到,实在震撼了我啊(孤陋寡闻...). 本来没打

图表制作工具之ECharts

简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力. 支持折线图(区域图).柱状图(条状图