侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

牛客网《JavaScript》能力评测练习1--数组的操作

2024-05-06 星期一 / 0 评论 / 0 点赞 / 56 阅读 / 12425 字

查找指定元素在数组中位置 function indexOf(arr, item) { if (Array.prototype.indexOf) {//判断是否支持indexOf方

查找指定元素在数组中位置

    function indexOf(arr, item) {        if (Array.prototype.indexOf) {//判断是否支持indexOf方法 indexof在ie浏览器不兼容            return arr.indexOf(item);        } else {            for (var i = 0; i < arr.length; i++) {                if (arr[i] === item) {                    return i;   /*return具有直接退出函数的功能,在return下面的代码不会执行而直接结束函数,所以不用break完全ok。*/                }            }        }        return -1;    }

数组求和

var arr = [1, 2, 3, 4];function sum(arr) {    return eval(arr.join('+'));}/*1.join() 方法用于把数组中的所有元素放入一个字符串。2.语法:arrayObject.join(separator)3.参数:separator 描述:可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。4.返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。5.arr.join('+') 会返回字符串 1+2+3+4。6.eval会试图执行字符串 返回数组之和!*/

移除数组中元素

/*移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 例子:remove([1, 2, 3, 4, 2], 2);==>[1, 3, 4]*/function remove(arr, item) {    for(var i=0, len=arr.length, newArr=[]; i<len; i++){        if(item === arr[i]) continue;/*如果全等 跳过*/        else newArr.push(arr[i]);/*将不相等的push数组*/    }    return res;}/*另一种实现方法*//*题目要求不要修改原数组,而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。*/function remove(arr, item) {  var newArr=arr.slice(0);      for(var i=0;i<newArr.length;i++){          if(item==newArr[i]){              newArr.splice(i,1);              --i;//因为是删除了原始数组内容,数组长度变了,i--从当前位置再次查找。//splice方法会改变数组的长度,因此在每次删除之后,都需要执行i--以确保数组长度正确。           }      }            return newArr;}/*splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。注释:该方法会改变原始数组。arrayObject.splice(index,howmany);index	必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。howmany	必需。要删除的项目数量。如果设置为 0,则不会删除项目。例子:var arr = new Array(6)arr[0] = "少"arr[1] = "itme"arr[2] = "侠"arr[3] = "气"arr[4] = "交"arr[5] = "结五都雄"document.write(arr + "<br />")arr.splice(1,1,"年")document.write(arr + "<br />")输出:1:少,itme,侠,气,交,结,五,都,雄2:少,年,侠,气,交,结,五,都,雄*/

添加元素

在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组 

    function append(arr, item) {        return arr.concat([item]);     // var arr2 = arr.slice(0);     // arr2.push(item);     // return arr2;    }/*concat() 方方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。  !!!push()方法修改原数组,它返回的是新的数组的长度;但是也return 也能实现。*/

删除数组最后一个元素

function truncate(arr) {	return arr.slice(0,-1);    }/*slice() 方法可从已有的数组中返回选定的元素。语法arrayObject.slice(start,end)参数	描述start	必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。end	   可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。返回值   返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。说明   请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。*//*另一种方法*/function truncate(arr) { var a = arr.slice(0);     a.pop();/*弹出末尾最一个元素*/     return a; }/*题目要求不要修改原数组,而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。*/

添加元素

在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组 

function prepend(arr, item) {    return [item].concat(arr);}/*return arr.concat([item]); 为什么不行?修改原数组了。*//*我想到的写法也就是这样了....*/function prepend(arr, item) {     //将arr数组复制给a     var a = arr.slice(0);     //使用unshift方法向a开头添加item     a.unshift(item);     return a; }/*  unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。返回值   arrayObject 的新长度。说明   unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。    请注意,unshift() 方法不创建新的数组,而是直接修改原有的数组。  注释:unshift() 方法无法在 Internet Explorer 中正确地工作!  注释:该方法会改变数组的长度!*//*题目要求不要修改原数组而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。slice(0)指定了第一个必选参数start为 0 也就是从头开始截取。但是没有指定end参数,所以就是截取整个数组。*/

删除数组第一个元素

删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组 

function curtail(arr){ return arr.slice(1);/* 或者	var a=arr.slice(0);    a.shift();    return a;*/}/*slice();说明请注意,该方法并不会修改数组,而是返回一个子数组slice(1);从数组第二个位置截取数组到最后。返回截取后的新数组。*/

数组合并

合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 

    function concat(arr1, arr2) {        return arr1.concat(arr2);    }    var arr1=[0,1,2];    var arr2=[3,4,5];    var arr3=concat(arr1,arr2);    console.log(arr1);    console.log(arr2);    console.log(arr3);/*concat() 方法用于连接两个或多个数组。   该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。语法   arrayObject.concat(arrayX,arrayX,......,arrayX)参数	描述   arrayX	必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。返回值   返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。*/

添加元素

在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组 

function insert(arr, item, index) {     //复制数组     var a = arr.slice(0);     a.splice(index, 0, item);     return a; }/*自己写的时候记错了splice的参数了 index 和item 位置写反了。index是下标位置 ,0处是要删除的个数。 item是要插入的元素。 要注意!*/

计数

统计数组 arr 中值等于 item 的元素出现的次数 

/*自己写的*/function count(arr, item) { var c=0;    for(var i=0,len=arr.length;i<len;i++){        if(arr[i]!=item){continue;}        else{++c;}    }    return c;}/*   continue:结束本次循环,循环变量继续递增或递减,开始下次循环   break:结束循环,执行循环后面的代码(如果有的话)   return:结束函数的执行,return后面的所有代码都不再执行*//*题目本身很简单,有很多实现的方式,循环遍历,正则表达式都可以很容易实现。使用循环遍历,首先声明一个变量count用于计数,forEach循环看起来更加简洁传入一个匿名方法,接收一个参数e用于传入数组中的每一项最后用一个三元条件运算符来判断结果true则执行count++,false则为0,最后返回count。*/function count(arr, item) {     var count = 0;     arr.forEach(function(e){         //e为arr中的每一个元素,与item相等则count+1         e == item ? count++ : 0;     });     return count; }

查找重复元素

找出数组 arr 中重复出现过的元素 

  var arr = [1, 2, 6, 4, 5, 6, 7, 7, 9, 0, 2, 3, 5, 4, 6];/*自己写的*/    function duplicates(arr) {         arr.sort()/*之前写的时候出错了,因为没有对数组排序。无法比较相邻元素是否相同,所以要先对数组排序*/        console.log(arr.sort());//[0, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 9]        for (var i = 0, arr1 = [], len = arr.length; i < len; i++) {            if (arr[i] == arr[i + 1]) {//当前元素a和下一元素b作比较  如果相同 push 进新数组                arr1.push(arr[i]);                i++;//如果相同下一次对比位置从b+1之后再循环+1的位置进行比较 跳过比较过的元素            }        }        if (arr1.length == 0) {            throw  "没有相同的!"        }        return arr1;    }    console.log(duplicates(arr));//[2, 4, 5, 6, 7]/*其他写法*/function duplicates(arr) {    var a=arr.sort(),b=[];    for(var i in a){        if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]);     }    return b;}//先排序,如果后一个与前一个相等且未保存,则保存。

求二次方

为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组 

    function square(arr) {        var a=arr.slice(0);//截取整个数组赋值给 新数组a        if(Array.prototype.forEach){//貌似IE不支持,所有判断一下,能用就用。不能用拉倒            a.forEach(function(e,index){                a[index]=e*e;            });        }else{            for(var i= 0,len= a.length;i<len;i++){                a[i]=a[i]*a[i];            }        }        return a;    }/*大神写的如下*/function square(arr) {    return arr.map(function(item,index,array){        return item*item;    })}

查找元素位置

在数组 arr 中,查找值与 item 相等的元素出现的所有位置 

   /*查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。*/ function findAllOccurrences(arr, target) {        for(var i= 0,len= arr.length,a=[];i<len;i++){            if(arr[i]!=target){continue;}else{                a.push(i);            }        }        return a;    }

 

广告 广告

评论区