JS中我们可以根据需求新建新的对象解决问题的同时,也有一些常用的内置对象供我们使用,我们称之为API,本篇文章只是对数组部分进行了练习。
例一:伪数组,不能修改长短的数组(所以没办法清零),可以修改元素,代码实现如下:
<script> fn(1,2); fn(1,2,3,4,5,6); fn(1,2,4,5,7,9,4); function fn(a,b){ arguments[0]=0; console.log(arguments); arguments.push(1); console.log(arguments instanceof Array); console.log(arguments.length);//实参个数 console.log(fn.length);//形参个数 console.log(arguments.callee);//整个函数,包括注释 } </script>
伪数组打印的是实参,而普通函数调用打印的是形参,并且打印它的函数类型,我们发现它的类型显示并不是数组。
例二:将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
方法一:不利用内置对象,进行字符串拼接,由于第一个元素前没有特殊符号,首先将其赋值后,循环从下一个元素开始遍历
<script> var arr=["刘备","张飞","关羽"]; var str=arr[0]; for(var i=1;i<arr.length;i++){ str+="|"+arr[i]; } console.log(str); </script>
方法二:使用内置对象直接改变间隔符号
<script> var arr=["刘备","张飞","关羽"]; var str=arr.join("|"); console.log(str); </script>
两种方法进行对比,我们发现第一种方法使之产生了大量内存,导致内存浪费情况,从此看出对我们来说内置对象的使用帮我们解决了内存浪费的缺点。
例三:将一个字符串数组的元素的顺序进行反转。["a","b","c","d"] ->["d","c","b","a"]。使用两种种方式实现。
方法一:之前文章介绍过的方法
<script> var str1=["a","b","c","d"]; var str2=[]; for(var i=0;i<str1.length;i++){ str2[str1.length-i-1]=str1[i]; } console.log(str2); </script>
方法二:直接使用内置对象reverse()
解决
<script> var str1=["a","b","c","d"]; console.log(str1.reverse()); </script>
例四:工资的数组[1500,1200,2000,2100,1800],把工资超过2000的删除
使用内置对象filter()
实现题目需求。
<script> var arr=[1500,1200,2000,2100,1800]; var arr1=arr.filter(function(element,index,array){ if(element<=2000){ return true; } return false; }) console.log(arr1); </script>
例五:["c","a","z","a","x","a"]找到数组中每一个元素出现的次数
由于题目给出字符形式,让我们求出的相应字符的个数为数字形式,这让我们应用json更方便问题解决,将题目给出的字符作为“键”,将次数作为“键值”,来判断数组中的元素,在json中是否存在属性值,如果存在,在原有基础上加上1;如果不存在直接赋值为1。
<script> var arr=["c","a","z","a","x","a"]; var json={}; for(var i=0;i<arr.length;i++){ if(json[arr[i]]!==undefined){ json[arr[i]]+=1; }else{ json[arr[i]]=1; } } console.log(json); </script>
例六:编写一个方法 去掉一个数组的重复元素
方法一:新建数组,将原数组第一个元素push进入新数组。遍历原数组的每一个元素使之在新数组每一个元素中都不存在(嵌套两层for循环),就push进入原数组,否则就跳出新数组循环,进入原数组的下一个元素循环。
<script> var arr=[3,2,4,5,5,3,5,568,4,21,7]; var arr1=fn(arr); function fn(array){ var arr2=[]; arr2.push(array[0]); abc:for(var i=0;i<array.length;i++){ for(var j=0;j<arr2.length;j++){ if(arr2[j]==array[i]){ continue abc; } } arr2.push(array[i]); } return arr2; } console.log(arr1); </script>
方法二:创建一个新数组,循环遍历,只要新数组中有旧数组的值,就不要在添加。每次都要判断新数组中是否有旧数组的值,保证旧数组的元素和新数组中每一个都不相等,则赋值给新数组的下一元素的值。
<script> var arr=[1,2,3,4,5,2,3,4]; console.log(arr); console.log(fn(arr)); function fn(array){ var newArr=[]; for(var i=0;i<array.length;i++){ var bool=true; for(var j=0;j<newArr.length;j++){ if(array[i]===newArr[j]){ bool=false; } } if(bool){ newArr[newArr.length]=array[i]; } } return newArr; } </script>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。