js练习1 --- 函数数组
Posted 我爱你,程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js练习1 --- 函数数组相关的知识,希望对你有一定的参考价值。
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="./problem.js"></script>
</head>
<body></body>
</html>
第一题
题目:实现函数的重载。以Array数据类型的splice函数为例,用arguments数组来实现删除,插入和替换三个功能。(不能直接使用splice函数)。
problem.js
let arr = [2,4,6,7,22,14,17,9,1,3];
function splice_customize()
let args = Array.prototype.slice.apply(arguments); //将args转为真正的数组
if(args.length <= 0)
console.log("至少要有一个参数!");
return;
let index = args[0];
switch(args.length)
//一个参数,就是从数组下标index开始后面元素全删
case 1:
arr = arr.slice(0,index);
break;
//两个参数,第一个参数指定数组下标index,第二个参数指定要删多少个元素
case 2:
let num = args[1];
if(index+num > arr.length)
console.log("无法删这么多元素!");
else
arr = [...arr.slice(0,index),...arr.slice(index+num,arr.length)];
break;
//三个参数,第一个参数指定数组下标index,第二个参数指定要删多少个元素,第三个元素指定要插入的元素
default:
let num2 = args[1];
let elements = args.slice(2,args.length);
if(num2 == 0)
//插入元素
arr = [...arr.slice(0,index),...elements,...arr.slice(index,arr.length)];
else if(num2 > 0)
//替换元素
if(index+elements.length > arr.length)
console.log("无法替换这么多元素!")
else
arr = [...arr.slice(0,index),...elements,...arr.slice(index+elements.length,arr.length)];
else
console.log("第二个参数不能为负数!")
//测试
splice_customize();
splice_customize(8);
console.log("从数组下标8开始往后全部删除后:"+arr);
splice_customize(1,20);
splice_customize(5,2);
console.log("从数组下标2开始往后删2个元素:"+arr);
splice_customize(3,0,88,88,88);
console.log("从数组下标3开始往后插入3个元素:"+arr);
splice_customize(4,2,99,99);
console.log("从数组下标4开始往后替换2个元素:"+arr);
splice_customize(1,-1,5);
splice_customize(6,5,5,5,5,5,5);
第二题
题目:使用迭代方法替代for循环。假设数组[4,6,12,8,10],设定相应的条件(2的幂指数),实现every, some, filter和map四种迭代方法。(map:每个元素增加10%)
problem.js
let arr = [4,6,12,8,10];
//every的实现
let isEvery = arr.every(item =>
return item > 0 && ((item & (item-1)) == 0); //(item & (item-1)) == 0用于判断该元素是不是2的N次方
);
if(isEvery)
console.log('数组里面的元素都是2的幂指数');
else
console.log('数组里面的元素不都是2的幂指数');
//some的实现
let isSome = arr.some(item =>
return item > 0 && ((item & (item-1)) == 0);
);
if(isSome)
console.log('数组里面的元素存在2的幂指数');
else
console.log('数组里面的元素不存在2的幂指数');
//filter的实现
let newArr = arr.filter(item =>
return item > 0 && ((item & (item-1)) == 0);
)
console.log(newArr); //将是2的幂指数的元素筛选出来并打印
//map的实现
let newArr2 = arr.map(item =>
return Math.round(item*1.1*100)/100; //每个元素增加10%,并保留两位小数
)
console.log(newArr2);
第三题
题目:编写noRepeat()函数,删除数组中重复元素,将剩余元素升序排列后,返回新的数组。
problem.js
let arr = [2,3,5,5,8,8,24,17,9,3,9];
//去重并排序
function noRepeat(array)
const set = new Set(array);
return [...set].sort((a,b)=>
return a-b;
);
console.log(noRepeat(arr))
第四题
题目:利用两个栈模拟实现一个队列。
problem.js
//用两个栈模拟实现一个队列
function Queue()
let stack1 = [], stack2 = [];
//元素入队,这里实际上是元素压入栈1
this.push = function(element)
stack1.push(element);
//元素出队,这里实际上是栈1元素全部出栈,依次压入栈2,然后栈2栈顶弹出一个元素
this.pop = function()
if(stack1.length == 0) return;
while(stack1.length !== 0)
stack2.push(stack1.pop());
let elem = stack2.pop();
//元素出队之后,再把元素从栈2压回栈1
while(stack2.length !== 0)
stack1.push(stack2.pop());
return elem;
// 检查队列是否为空
this.isEmpty = function ()
return stack1.length == 0
// 返回队列的长度
this.size = function ()
return stack1.length;
//测试
let queue = new Queue();
queue.push(2);
queue.push(3);
console.log('出队元素:' + queue.pop());
console.log('队列长度:' + queue.size());
queue.push(4);
queue.pop();
console.log('出队元素:' + queue.pop());
console.log('队列长度:' + queue.size());
以上是关于js练习1 --- 函数数组的主要内容,如果未能解决你的问题,请参考以下文章