04—数组相关函数一

知识点一:数组转换成字符串

JS中对象基本都有toString()与join()方法。方法就是函数,就是功能。

1、toString()方法会返回由数组中每个值以逗号拼接成的字符串。

2、join()可以

案例解释:

var arr = Array('P','H','P');

var str = arr.toString();        //结果 P,H,P ,str是字符串格式,arr还是数组

#join的实际应用

var str2 = arr.join(' | ');    //结果 P|H|P

#不给参数的join情况

var str2 = arr.join();  //如果没有给join传递参数,或传递undefined默认都会使用逗号作为分隔符,老版本浏览器不都是这样默认的,建议给定参数。

知识点二:通过内置方法给数组添加或删除元素(模拟栈方法)

1、push()方法可以接受任意数量的参数,把他们逐个添加到数组的末尾,并返回修改后的数组的长度。

2、pop()方法从数组末尾移除最后一项元素,减少数组的length值,然后返回移除的元素。

代码示例一用法如下:

var arr = Array('p','h');

echo(arr.length);                        //输出2

var nLength = arr.push('M');

echo('数组长度现在是:'+arr.length+"返回值nLength="+nLength); //输出 3

arr.pop();                                //删除最后一项(也叫弹出)

echo(arr.length);                        //输出2

for(p in arr){

echo('arr['+p+']='+arr[p]);

}

/*

输出:

arr[0]=p

arr[1]=h

*/

echo('------------push()与pop()案例二-------------');

var arr = Array('p','h');

echo(arr.length);                        //输出2

arr.push('D');                                //这个索引是2

arr[3]='L';                                        //这个索引是3

t = arr.pop();                                //删除索引是3的并返回其值

echo(t);                                        //输出:L,pop删除的是最后一项

for(p in arr){

echo('arr['+p+']='+arr[p]);

}

/*

输出:

arr[0]=p

arr[1]=h

arr[2]=D

*/

复制代码

代码示例二用法如下:

1、shift()与pop()刚好相反,是从最前端删除一个元素,改变数组的长度,并返回删除的元素

2、unshift()与push()刚好相反,是从最前端插入一个元素,改变数组的长度,并返回修改后的长度

代码示例:

var arr = ["S","E"];

echo(arr.length);                //输出2

echo(arr.shift());                //把第一个元素给删除掉

echo(arr.length);                //剩余最后一个元素E

for(p in arr){

echo('arr['+p+']='+arr[p]);

}

//输出:arr[0]=E

echo("------unshift()用法------");

var arr = ["E","O"];

echo(arr.length);                        //输出:2

echo(arr.unshift("S"));                //输出:3

for(p in arr){

echo('arr['+p+']='+arr[p]);

}

/*

输出:

arr[0]=S

arr[1]=E

arr[2]=O

*/

复制代码

思考题:请同学们实现你的unshift

echo("------思考如果没有unshif()我们如何向数组的第一个元素插入新值?并且原来值的索引都向后移动一位-----");

//下面做法显然是行不通的,请开动脑筋另寻它法吧。

var arr = ["E","O"];

arr[0]  = "S";

可以使用数组的splice函数()

vararr =[1,2,3,4,5];

arr.splice(0,0,8);

console.log(arr)

知识点三:数组排序函数

项目中的实际应用:按价格高低排序,按年龄大小排序,按销量排序,不胜枚举你不应该精通吗?

1、reverse()反转数组元素的顺序后返回此数组。

2、sort()方法默认按升序排列数组元素,即小的在前大的在后,排序后返回此数组。

sort()方法会调用数组元素的toString()方法强制把每项转化成字符串进行比较,

即使数组中的项都是数值,也会以字符串形式比较。

echo("请自定义一个echo函数,可以输出内容即可");

var arr = [1,3,5,7,9];

echo(arr.join("->")); //输出:1,3,5,7,9

//有时候我们希望是从大到小怎么办?

echo(arr.reverse().join("<-"));

echo("------sort()使用案例------");

var arr = [3,1,7,5,9];                        //顺序混乱

echo(arr.sort().join("->"));        //输出 1->3->5->7->9

var arr = [3,11,7,25,9];                        //顺序混乱

echo(arr.sort().join("->"));        //输出 11->25->3->7->9

/*

没有按数值大小排序,而是按字符串大小排序了。如果想以数值形式排序怎么办?

为了解决这个问题,sort()方法可以接收一个比较函数作为参数,以便我们自由指定顺序关系。

比较函数需要按如下要求写:

比较函数需要接收两个参数,

如果第一个参数应该位于第二个参数前面就返回负数,

如果两个参数相等就返回0,

如果第一个参数应该位于第二个参数后面则返回一个正数。

*/

function myCompare(v1,v2){

if(v1

return -1;

}else if(v1==v2){

return 0;

}else{

return 1;

}

//根据要求我们可以看到对于数值型也可以用 return v1-v2 ; 这一句代替上面多句

//减法结果:正,负,零

}

var arr = [3,11,7,25,9];                        //顺序混乱

echo(arr.sort(myCompare).join("->"));        //输出 3->7->9->11->25

说明:v1和v2的实际参数有sort函数自动传入给myCompare,大家可以想想可变函数就很好理解。

例子

functionmycompare(p1,p2) {

if(p1>p2){

return 1

}else if(p1==p2){

return 0;

}else{

return-1;

}

}

vararr =[5,1,3,2,8,9,7,0];

console.log(arr.sort(mycompare))



知识点四:数组位置查找

1、indexOf();

2、lastIndexOf();

说明:以上两个函数都接受两个参数,第一个是要查找的元素,第二个是起始索引位置。

indexOf()是从左向右查找,lastIndexOf()是从右向左查找。

返回值:返回查找元素所在的索引位置,或者在没有找到的情况下返回-1

代码解释:

echo("------数组位置查找方法indexOf()与lastIndexOf()使用案例------");

var arr = Array('P','H','P');

echo(arr.indexOf('P'));         //输出:0,也就是P元素在索引为0的位置

echo(arr.indexOf('P',1)) //输出:2 ,因为是从索引为1的位置开始查找。第一次找到时候是在索引为2的元素

var arr = Array('P','H','P');

echo(arr.indexOf('P'));         //输出:0,也就是P元素在索引为0的位置

echo(arr.indexOf('P',1)) //输出:2 ,因为是从索引为1的位置开始查找。第一次找到时候是在索引为2的元素

echo('---lastIndexOf()用法---')

var arr = Array('P','H','P','M','P');

echo(arr.lastIndexOf('P'));                //输出 4,索引为2的位置找到4

echo(arr.lastIndexOf('P',3));        //输出 2,索引为3的位置开始向左查账找到P

复制代码

知识点五:数组的合并连接

concat:是单词concatenate的简写,把某某联系到一块,连接到一块

案例:

var arr =['SEO'];

var arr2 = ['PHP'];

var arr3 = arr.concat(arr2,'冬瓜皮');

for(p in arr3){

echo('arr3['+p+']='+arr3[p]);

}

输出:

arr3[0]=SEO

arr3[1]=PHP

arr3[2]=冬瓜皮

说明:

concat()方法基于调用它的数组的所有项创建一个新数组,然后将接收到的参数添加到这个副本末尾,最后返回新构建的数组。

如果不给concat()方法传递参数,他就是简单基于调用它的数组的所有项创建一个副本。

如果传递的不是数组,这些值会被添加到结果数组的末尾。

复制代码

/*slice:切成片;切下;划分

说明:slice([n1,n2])方法的功能是基于当前数组一或多个项创建一个新数组,slice()方法可以接受一个或两个参数

n1与n2分别代表数组的起始和结束位置(包含起始不包含结束)。

在只有一个参数情况下slice返回从指定参数开始到数组末尾。

注意:如果n1与n2是负数那么和调用数组长度加上这个数组的结果相同

例如:对于一个5项的数组调用  slice(-2,-1)与slice(3,4)等同,实际应用没人传负数。

如果n2小于n1返回空数组。

*/

echo('-----------数组切分slice()用法---------');

var arr = ['PHP','SEO','GOOD'];

var arr2 = arr.slice(1,2);                //意思是索引值  n>=1 和 n<2  也就是只有一个SEO符合条件

for(p in arr2){

echo('arr2['+p+']='+arr2[p]);

}

//输出:arr2[0]=SEO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容