[前端学习]js语法部分学习笔记,第四天

JS内置数组对象操作

  • 数组名.concat()连接两个或更多的数组
  • 数组名.valueOf() 返回数组本身的值,这个一般不用,浏览器会默认调用
  • 数组名.toString() 把数组中的所有值转为字符串,并用逗号连接
  • 数组名.join() 也是把数组拼接为字符传,用实参传入的字符来连接值,不写默认为逗号
  • Array.isArray(数组名) 检测传入值是否是数组,ES5新增方法,老版浏览器不支持
  • 数组名.unShift(值) 从数组开头添加值,添加多个值用逗号隔开。返回值是添加过后的数组的长度
  • 数组名.push(值) 从数组结尾添加值,添加多个值用逗号隔开。返回值是添加过后的数组的长度
  • 数组名.shift() 从数组开头删除一个值。返回值是被删除的值
  • 数组名.pop() 从数组后面删除一个值。返回值是被删除的值
  • 数组名.reverse() 把数组里面值的顺序翻转
  • 数组名.slice(开始位置,结束位置[不包括结束位置的值]) 把数组里的值根据参数截取出来,并放入一个新的数组
  • 数组名.splice(开始位置,删除个数,插入值) 从参数开始的位置删除规定个数的值,如果写插入就是在删除值的位置插入,这个是对原数组操作。
  • 更多内置方法,找手册查阅

找到数组中某个值出现的所有位置

  • 数组名.index(值,查找位置) 这个方法可以查找某个值在数组第一次出现的位置,并返回索引号。查找位置参数值从索引值几开始找,如果找不到会返回-1。
  • 数组名.lastIndex(值,查找位置) 这个方法与上面的顺序相反,是反方向来找。
  • 通过index()这个方法配合循环还可以找到某个值所有出现的位置。这里使用do while循环,因为必须要找了才知道数组中有没有,所以必须得执行一次
    //假设有一个数组
    var arr = [x,x,x,x,x,x,x,x,x,x];
    //设置查找位置,因为每找到一次这个值后,就不用再找它了,所以要跳过它,就是位置+1,从它的后面一位开始找,又因为初始查找位置肯定是0
    var index = -1;
    var newArr = [];
    do {
    newArr.push(arr.index(值,index+1)) ; //把所有出现的位置赋值给新数组,再计算长度,还可以知道出现了多少次
    } while( index != -1) //如果返回值为-1就说明找不到,结束循环
  • 这样通过循环后,它会找到该值,并返回所有出现的位置。

统计数组中每个元素出现的次数

  • 要统计每个元素出现的次,首先肯定是用对象来存放,因为键值对才能清晰的展示
    var arr = [x,x,x,x,x,x,x,x,x,x];
    //首先需要一个空的对象来装
    var obj = {};
    for (var i=0; i<arr.length; i++) {
    //创建一个临时变量,存在数组的值,也作为对象的键
    var temp = arr[i];
    //如果循环到的当前值在对象中存在,说明这个值已经出现过一次,则给对象的对应属性的值+1。如果不存在就说明第一次出现,创建一个与当前值同名的对象属性,并为其赋值为1
    if(obj[temp]) {
    obj[temp] = obj[temp] + 1;
    } else {
    obj[temp] = 1;
    }
    }
    console.log(obj);

使用递归进行数组快排

/*使用递归快排的原理是把数组中的第一个值取出来作为标杆,然后遍历数组并让它来比较,比它小的放到一个左边数组,比它大的放到一个右边数组
然后左边和右边的数组分别使用同样的方法(递归实现)来进行比较,一直比较到最后,把标杆和左右数组连接起来就是排序好的数组了。*/
var arr = [30,10,29,58,24,45,38,69,73,8];
function arrSort(arr) {
//设置一个递归结束的条件,防止无限递归
//当递归到最后,左右数组都没有值了,说明原数组只剩一个值,直接连接就行了
if(arr.length == 0) {
return [];
}
//创建存放标杆值的临时变量和左右两个数组
var temp = arr[0];
var left = [];
var right = [];
for(var i=1; i<arr.length; i++) {
//如果当前值比标杆值大放入右边数组,反之把标杆值放入左数组
if( temp < arr[i] ) {
right.push( arr[i] );
} else {
left.push( arr[i] );
}
}
/*排序过程:在递归过程中,会先执行arrSort(left)并多次执行比较左右分组,然后又再次递归,直到里面的左右分组没有值,
就返回空值,然后根据分组顺序左+temp+右来连接,这样的结果顺序一定是正确的
然后再执行arrSort(right),执行过程与上面相同,最终返回正确顺序的结果。
最后连接最初的temp,就完成了快排*/
var newArr = arrSort(left).concat(temp, arrSort(right));
return newArr;
}
var arr1 = arrSort(arr);
console.log(arr1);

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

推荐阅读更多精彩内容