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>