马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天学习数组API,
一. 数组API:
1. 数组排序:arr.sort() 直接修改原数组
问题:默认sort方法,只能将所有元素转为字符串再排序
结果:无法对数字类型排序
//数组排序
var arr=[10,23,5,90,41,6,7];
arr.sort();
console.log(arr);
其结果如下:
以上结果可以看出,默认的sort()方法,将所有元素转为字符串按unicide码进行比较,这不是我们想要的结果
解决方法:自定义比较规则,前面练习中的冒泡排序其实就是比较器函数的原始代码。
1. 先定义比较器函数对象
比较器函数:专门封装任意两数比较逻辑的函数
参数必须是2个:a和b
函数体:比较两个数的大小
返回值:如果a>b,必须返回>0的数
如果a<b,必须返回>0的数
如果a==b, 必须返回0;
数字比较器:
升序a>b:function compareSx(a,b){return a-b};
降序a<b:function compareJx(a,b){return b-a};
始终a是当前,b是下一个,所以参数a,b顺序不能变
2. 将比较器函数对象,传入sort方法内:
语法:arr.sort(compare);
- //数组排序
- <script>
- function compareSx(a,b){return a-b}; //升序
- function compareJx(a,b){return b-a}; //降序
- var arr=[10,23,5,90,41,6,7];
- arr.sort(compareSx);
- console.log(arr);
- arr.sort(compareJx);
- console.log(arr);
- </script>
复制代码其结果如下:
注意: js中函数也是一个对象!
函数对象可以被当做参数传递!
函数对象传递到哪儿,就可以在哪儿调用!
例如:
- <script>
- //函数当做对象的传递,函数参数也可以是变量
- function card(shicai,gongju){//任务卡
- console.log("使用"+gongju+"加工"+shicai);
- }
- function taskTiantian(taskCard){//天天的任务
- var shicai="鸡蛋";
- var gongju="铁锅";
- taskCard(shicai,gongju);
- //天天按照任务卡的步骤,加工自己的食材
- console.log("天天完成炒鸡蛋");
- }
- function taskDuoduo(taskCard){//多多的任务
- var shicai="肉";
- var gongju="平底锅";
- taskCard(shicai,gongju);
- //多多按照任务卡的步骤,加工自己的食材
- console.log("多多完成炒肉");
- }
- taskTiantian(card);//天天得到任务卡,开始执行任务
- taskDuoduo(card);//多多得到任务卡,开始执行任务
- </script>
复制代码
2.栈和队列:js中都是用数组模拟
栈:一端封闭,只能从另一端进出的数组
何时使用栈:仅从一端进出数组时,就用栈结构
规则:先进的后出
从数组末尾出入栈:其他元素的下标不受影响
末尾 入栈: arr.push(新值)
末尾 出栈:var last=arr.pop()
- //栈,尾部进,尾部出
- var arr=[1,3,5,1,6];
- arr.push(9,8,7);
- console.log(arr);
- var last=arr.pop();
- console.log(arr);
- console.log(last);
复制代码
从数组开头出入栈:每出入栈一次,其余元素下标都要瞬移
开头 入栈:arr.unshift(新值);
开头 出栈:var first=arr.shift();
- //栈,头部进,头部出
- var arr=[1,3,5,1,6];
- arr.unshift(9,8,7);
- console.log(arr);
- arr.shift();
- console.log(arr);
复制代码
队列:从一端进入,从另一端出的数组,其实是两种栈的结合
arr.push(值1,值2);---->从结尾入列
arr.shift();--------->从头部出列
规则:先进的先出
//队列
var arr=[1,3,5,2,6];
arr.push(8,9);
console.log(arr);
arr.shift();
console.log(arr);
|