6-1 数组函数练习

1、引用

/*          var num = 10;
			function show(num){
				num++;
				alert(num);
			}
			alert(num); //10

			show(num);  //11  num = num

			alert(num); //10*/


			/*
				引用
			*/

			/*var arr = [1, 2, 3, 4];

			function show(arr){
				arr.push("hello");
				alert(arr);
			}

			alert(arr); //[1, 2, 3, 4]
			show(arr);  //[1, 2, 3, 4, "hello"]
			alert(arr); //[1, 2, 3, 4, "hello"]*/

2、引用排序函数

<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
		<script src = "tool.js"></script>
		<script>
			var arr = [10, 9, 5, 1, 2, 6, 7];
			// bubbleSort(arr);
			selectSort(arr);
			alert(arr);
		</script>
	</head>
	<body>
		
	</body>
</html>

3、return

/*function add(num1, num2){
				var b = num1 + num2;
				return "hello";
			}*/
		/*
			1、确定你的函数要不要结果。
			2、return语法,return后面写什么,外面拿到的值,就是return后面的表达式。
		*/


		/*var res = add(10, 20);
		alert(res);*/

4、arguments

            function show(){
				alert(arguments.length);
				alert(arguments); //输出:object Arguments
			}

			show(1, 2, 3);

			var arr = [1, 2, 3, 4, 5];
			show(arr);

5、习题

1、有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。([2,3,4,56,67,98] //63
2、编写函数map(arr) 把数组中的每一位数字都增加30%
3、编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型
		/*var arr = [2,3,4,56,67,98];
		var num = 63;
		for(var i = 0; i < arr.length; i++){
			if(arr[i] > num){
				arr.splice(i, 0, num);
				break;
			}
		}*/

		// alert(arr);
		/*
			关键:找出第一个第一个比该数大的数
		*/

		var arr = [10, 20, 30, 40, 60];
		function map(arr){
			for(var i = 0; i < arr.length; i++){
				arr[i] = arr[i] * 1.3;
			}
		}

		/*map(arr);
		alert(arr);*/

		function has(arr, num){
			var isHas = false; //假设没有
			for(var i = 0; i < arr.length; i++){
				if(arr[i] == num){
					isHas = true;
					break;
				}
			}
			return isHas;
		}

		var res = has(arr, 60);
		alert(res);
4、生成13位条形码(对之前的知识综合练习)
Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。

	例如:690123456789
第三位计算其校验码的过程为:

	                1、前十二位的奇数位和6+0+2+4+6+8=26

                	2、前十二位的偶数位和9+1+3+5+7+9=34

                	3、将奇数和与偶数和的三倍相加26+34*3=128

                	4、取结果的个位数:128的个位数为8

                	5、用10减去这个个位数10-8=2

    所以校验码为2(注:如果取结果的个位数为0,那么校验码不是(10-0=10),
    而是0)实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。

    例如:输入:692223361219输出:6922233612192

			//想办法将这个十二位数拆成每一位
			//69012345678
			function barCode(num){
				//1、分别取出每一位数
				var numArr = []; //存储取下来的每一位数
				while(1){
					if(num == 0){
						break;
					}
					numArr.push(num % 10);
					num = parseInt(num / 10);
				}
				numArr.reverse();

				//2、求奇数和和偶数和
				var odd = 0;
				var even = 0;
				for(var i = 0; i < numArr.length; i++){
					if(i % 2 == 0){
						//奇数位
						odd += numArr[i];
					}else{
						//偶数位
						even += numArr[i];
					}
				}

				//3、
				var tmp = (odd + even * 3) % 10;
				if(tmp != 0){
					tmp = 10 - tmp;
				}

				numArr.push(tmp);
				return Number(numArr.join(""));

			}

			var res = barCode(690123456789
);
			alert(res);
5、编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组

/*
倒着删除
【注】凡是遍历数据去重,都倒着删除。
*/

                function noRepeat(arr){
				//去重
				//选择arr.length - 1个数 和后面进行比较
				//i选出的数
				/*for(var i = 0; i < arr.length - 1; i++){

					//j被比的数
					for(var j = i + 1; j < arr.length; j++){
						if(arr[i] == arr[j]){
							arr.splice(j, 1);
						}
					}
				}*/

				for(var i = arr.length - 1; i > 0; i--){
					for(var j = i - 1; j >= 0; j--){
						if(arr[i] == arr[j]){
							arr.splice(j, 1);
						}
					}
				}
			}


			var arr = [10, 20, 20, 20, 30, 20, 40, 50];
			noRepeat(arr);
			alert(arr);
6、猴子吃桃

最强王者法则:
1、找出临界值,临界值就是,不用计算,直接心算得出的值。
2、找出第n次和n-1次的关系
3、假设函数已经可以使用,写出n和n-1之间的公式。

        有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,
		又多吃了一只,第二天照此办法,吃掉剩下桃子的一半另加一只,
		天天如此,到第num(num <= 10)天早上,猴子发现只剩一只桃子了,
		问这堆桃子原来有多少只?
			n为还剩n天吃完的桃子数
	
分析:
                peach(10) / 2 - 1 = peach(9);
				peach(10) = (peach(9) + 1) * 2;
				peach(n) = (peach(n - 1) + 1) * 2;
		

			function peach(n){
				if(n == 1){
					return 1;
				}
				return (peach(n - 1) + 1) * 2;
			}
			//46
			var res = peach(5);
			alert(res);
7、密文
/*
				某个公司采用公用电话传递数据,数据是四位的整数,
				在传递过程中是加密的,加密规则如下:
					1、每位数字都加上5,
					2、然后用除以10的余数代替该数字,
					3、再将第一位和第四位交换,
					4、第二位和第三位交换,请编写一个函数,传入原文,输出密文
			*/

			//4 3 2 1
			function ciphertext(num){
				//1、拆成数组
				var numArr = [];
				while(1){
					if(num == 0){
						break;
					}
					numArr.push(num % 10);
					num = parseInt(num / 10);
				}
				for(var i = 0; i < numArr.length; i++){
					numArr[i] += 5;
					numArr[i] = numArr[i] % 10;
				}
				
				return Number(numArr.join(""));
			}
			var res = ciphertext(1234);
			alert(res);
8、计算器
<head>
		<meta charset="UTF-8">
		<title>Document</title>
	</head>
	<body>
		<input type="text" id = "num1" placeholder="请输入第一个数">
		<input type="text" id = "num2" placeholder="请输入第二个数">
		<!-- 
			点击按钮以后,执行后续字符串中的代码
		 -->
		<button onclick = "btnClick('+');">+</button>
		<button onclick = "btnClick('-');">-</button>
		<button onclick = "btnClick('/');">/</button>
		<button onclick = "btnClick('*');">*</button>
		<button onclick = "btnClick('%');">%</button>
	</body>
	<script>


		function btnClick(operator){
			// alert(operator); 
			var oNum1 = Number($("num1").value);
			var oNum2 = Number($("num2").value);
			//根据不同的运算符,进行不同的运算。
			var res = counter(oNum1, operator, oNum2);
			alert(res);
		}


		/*
			简化代码
		*/
		function $(id){
			return document.getElementById(id);
		}

		function counter(num1, operator, num2){
			var res = 0;
			//1、运算符判断
			switch(operator){
				case "+":
					res = num1 + num2;
					break;
				case "-":
					res = num1 - num2;
					break;
				case "*":
					res = num1 * num2;
					break;
				case "/":
					res = num1 / num2;
					break;
				case "%":
					res = num1 % num2;
					break;
				default:
					alert("error");
					break;
			}
			return res;
		}

	</script>
</html>
【注】
    <body>
		<!-- onclick = ""后面字符串中写着js的执行代码 -->
		<button id = "btn" onclick = "btnClick();">按钮</button>
	</body>
	<script>
		/*var oBtn = document.getElementById("btn");
		oBtn.onclick = function(){
			alert(1);
		}*/

		function btnClick(){
			alert("点击");
		}
	</script>
posted @ 2018-07-06 20:50  飞刀还问情  阅读(611)  评论(0编辑  收藏  举报