美文网首页
【手撕代码2】数组

【手撕代码2】数组

作者: 一包 | 来源:发表于2019-04-03 17:00 被阅读0次
  • unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。会改变原数组
  • **pop() **方法用于删除并返回数组的最后一个元素。改变原数组
  • ** shift()** 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。会改变原数组
  • slice(start,end) 可从已有的数组中返回选定的元素,返回新数组,==不包括end!!!==
  • splice(index,howmany,item1,.....,itemX)/从数组中添加/删除项目,然后返回被删除的项目。改变原数组
    • index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
    • howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目.
    • item1, ..., itemX:可选。向数组添加的新项目。
  • Array.prototype.push.apply(a,b), [].push.apply(arr1, arr2) ;//a,b两个数组都变成合并后的数组,返回合并后数组长度。
  • a.concat(b), 合并数组,返回新数组,a.concat()复制自己
  • indexOf 是查某个指定的字符串在字符串首次出现的位置(索引值)
  • lastIndexOf 是从右向左查某个指定的字符串在字符串中最后一次出现的位置

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

function prepend(arr, item) {
    return [item].concat(arr);
}
function prepend(arr, item) {
    var newarr=arr.slice(0);
    newarr.unshift(item);//返回数组新长度
    return newarr;
}

function prepend(arr, item) {
    var newarr=arr.slice(0);
    newarr.splice(0,0,item);//返回数组新长度
    return newarr;
}


//普通的迭代拷贝
function prepend(arr, item) {
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    newArr.unshift(item);
    return newArr;
}

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

function curtail(arr) {
  return arr.slice(1);
}

function curtail(arr) {
    var newarr=arr.slice(0);
    newarr.splice(0,1);
    return newarr;
}

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

function concat(arr1, arr2) {
    return arr1.concat(arr2);
}


//利用slice+push.apply
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);
    [].push.apply(newArr, arr2);
    return newArr;
}

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



//利用slice+splice
function insert(arr, item, index) {
    var newArr=arr.slice(0);
    newArr.splice(index,0,item);
    return newArr;
}

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

function count(arr, item) {
    var mycount=0;
    arr.forEach(function(a){
        if(a==item){
            mycount++;
        }
    })
    return mycount;
}

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

function duplicates(arr) {
    var newarr=[];
    for(var i=0;i<arr.length;i++){
        if(arr.indexOf(arr[i])==i&&arr.lastIndexOf(arr[i])!==i){
            newarr.push(arr[i]);
        }
    }
    return newarr;
}

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

function square(arr) {
    return arr.map(function(item){
        return item*item;
    })
}


function square(arr) {
   //声明一个新的数组存放结果
     var a = [];
     arr.forEach(function(e){
         //将arr中的每一个元素求平方后,加入到a数组中
         a.push(e*e);
     });
     return a;
 }

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

function findAllOccurrences(arr, target) {
    var newarr=[];
    arr.forEach(function(item,index){
        if(item==target) {
            newarr.push(index);
        }
    });
    return newarr;
}

求一个数组中最大的数

function findeMax(arr){
    let result=0;
    if(Array.isArray(arr)){
        for(let i=0;i<arr.length;i++){
            result=result>arr[i]?result:arr[i];
        }
        return result;
    }else{
        return;
    }
}
function findeMax(arr){
    let result=0;
    if(Array.isArray(arr)){
      result=arr.reduce((pre,cur)=>{
          return pre>cur?pre:cur;
      },0);
    }else{
        return;
    }
}

相关文章

  • 【手撕代码2】数组

    unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。会改变原数组 **pop() **方法用...

  • 手撕数组

    【面试题51:数组中重复的数字】 【面试题32:求从1到n的整数中1出现的次数】 【面试题33:把数组排成最小的数...

  • 手撕代码

    前端笔试和面试都难免要手撕代码,有些面试官还就喜欢看你现场写。诚然,一个程序员在写代码时很容易暴露问题,但也能展现...

  • 手撕代码

    二分法的查找 单例-懒汉式 单例-饿汉式 快速排序

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 常见手撕代码

    1.实现兼容IE的事件处理程序 2.编写深度克隆函数

  • 【崔哥,您大胆往前冲!(1)】

    【崔哥,您大胆往前冲!(1)】 冯小刚要拍《手机2》,崔永元炸了。 他手撕冯小刚、手撕徐帆、手撕刘震云、手撕范冰冰...

  • 想吃面包别出去买了,手把手教你做手撕包,香甜软糯,奶香浓郁

    手撕已经成为了中的一种常态,很多的是食品都有手撕版本,例如手撕牛肉,手撕豆腐干,手撕鸭,手撕鸡,手撕面包当然也有的...

  • 手撕鸡

    手撕鸡、手撕面包、手撕包菜、手撕牛肉,各种手撕做法,听起来就很手工的感觉。我做的手撕鸡纯粹懒人所为。 具体做法如下...

  • 美食十五-手撕鸡

    手撕鸡是一道家常菜,很难界定它的产地归属,手撕鸡有外皮金黄的盐焗鸡手撕,有风干鸡手撕,还有特色的手撕鸡丝。 手撕鸡...

网友评论

      本文标题:【手撕代码2】数组

      本文链接:https://www.haomeiwen.com/subject/lwizbqtx.html