牛客刷题(常更)

2019-10-12 admin

1.找出元素 item 在给定数组 arr 中的位置

function indexOf(arr, item) {
  //先判断当前浏览器是否支持indexOf方法
  if (Array.prototype.indexOf){
      return arr.indexOf(item);
  } else {
      for (var i = 0; i < arr.length; i++){
          if (arr[i] === item){
              return i;
          }
      }
  }     
  return -1; //总是把return -1暴漏在最外层
}

2.计算给定数组 arr 中所有元素的总和 2.1 普通玩家版

function sum(arr) {
    let res = 0;
    for(let i=0;i<arr.length;i++){
        res += arr[i];
    }
    return res;
}

2.2 forEach版本

function sum(arr) {
    let res = 0;
    arr.forEach(function (curr,index,arr) {
        res += curr;
    });
    return res;
}
console.log(sum([1, 2, 3, 4, 5])); //15

注意点:forEach() 为每个数组元素执行callback函数;不像 map() 或者 reduce(),它总是返回 undefined 值,并且不可链式调用。

function sum(arr) {
    let res = 0;
    arr.forEach(function (curr,index,arr) {
        return res += curr;
    });
}
console.log(sum([1, 2, 3, 4, 5])); //返回undefined

2.3 ES6玩家版

function sum(arr) {
    return arr.reduce((prev,curr) => prev + curr,0)
}
//调试部分
console.log(sum([1, 2, 3, 4])); //10

3.移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 3.1 菜鸡(我写的)版本 如果数组中的元素不和item相等,把数组元素添加到新的数组中

function remove(arr, item) {
    let res = [];
    for(let i=0;i<arr.length;i++){
        if(arr[i] !== item){
            res.push(arr[i]);
        }
    }
    return res;
}

3.2 菜鸡版本的另一种实现 如果数组中的元素和item相等,就不再往下执行代码

function remove(arr, item) {
    let res = [];
    for(let i=0;i<arr.length;i++){
       if(arr[i] === item) continue;
       res.push(arr[i]);
    }
    return res;
}

3.3 slice&splice混用

  • 题意要求不要直接修改数组arr,结果返回新的数组;slice()方法可用于截取字符串,且返回的是截取内容(新的数组),我们可以传递参数0截取全部元素
  • 不可以直接使用赋值的方式拷贝一个数组,会导致更改一个数组的元素另外一个数组也会跟着改变的情况
  • 在新的数组上进行操作,利用splice()切割数组,splice()会改变原数组
function remove(arr, item) {
    let newArr = arr.slice(0); //
    for(let i=0;i<newArr.length;i++){
        if(newArr[i] === item){
            newArr.splice(i,1);
            i--;
        }
    }
    return newArr;
}

3.4 ES6玩家版(别人写的) filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。返回 返回true的项组成的数组

function remove(arr,item){
    return arr.filter(ele => ele !== item);
}

4.移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 4.1 直接在给定的数组上操作,则可以使用splice()方法,注意splice()方法删除元素后,数组长度也变化了,需要执行i--避免跳过元素。

function removeWithoutCopy(arr, item) {
    for(let i=0;i<arr.length;i++){
        if (arr[i] === item){
            arr.splice(i,1);
            i--;
        }
    }
    return arr;
}

4.2 倒着删除,不用考虑数组长度变化

function removeWithoutCopy(arr, item) {
    for(let i=arr.length-1;i>=0;i--){
        if(arr[i] === item){
            arr.splice(i,1);
        }
    }
    return arr;
}

[转载]原文链接:https://segmentfault.com/a/1190000020656304

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-77171.html

文章标题:牛客刷题(常更)

相关文章
4种方法帮你的网站创建更丰富的Web体验
现在的网站已经从一个简单的文本页面开始进化了很多,我们可以制作出丰富的视觉效果来增加用户在桌面浏览器和移动浏览器的体验。 今天这篇文字就给大家分享4个实用的方法,来帮助你创建更好的Web体验。 对于那些还在用IE6的朋友,我只想说一句:go...
2016-01-13
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
本文实例讲述了JS常见创建类的方法。分享给大家供大家参考,具体如下: Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class。(不过,ES6引...
2017-04-05
angular+ionic 的app上拉加载更新数据实现方法
第一步,首先需要在&lt;ion-content&gt;标签里面加入标签&lt;ion-infinite-scroll ng-if=&quot;hasmore&quot; on-infinite=&quot;loadMore()&quot;...
2017-03-07
整理AngularJS中的一些常用指令
AngularJS指令用于扩展HTML。这些都是先从ng- 前缀的特殊属性。我们将讨论以下指令: ng-app - 该指令启动一个AngularJS应用。 ng-init - 该指令初始化应用程序数据。 ng-model - 此指令定义的...
2017-03-24
JavaScript实现滑动到页面底部自动加载更多功能
话不多说,请看代码: &#x2F;&#x2F;滚动条到页面底部加载更多案例 $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); &#x2F;&#x2F...
2017-03-17
JavaScript 常见安全漏洞和自动化检测技术
前言 随着 Web2.0 的发展以及 Ajax 框架的普及,富客户端 Web 应用(Rich Internet Applications,RIA)日益增多,越来越多的逻辑已经开始从服务器端转移至客户端,这些逻辑通常都是使用 JavaScri...
2017-03-29
vue中利用axios实现文件上传进度实时更新
XHR二级增加了progress事件,我们可以据此在浏览器接收新数据期间添加实时数据进度条,从而使得交互更加友好 vue模板 &lt;div class=&quot;progress&quot; @click=&quot;upload&...
2017-12-19
浅谈JavaScript异常处理语句
程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止。运行时的错误统称为异常,为了能在错误发生时得到一个处理的机会,JavaScript提供了异常处理语句。包含try-catch、try-catch-...
2017-03-25
Vue常用指令V-model用法
v-model这个指令只能用在&lt;input&gt;, &lt;select&gt;,&lt;textarea&gt;这些表单元素上,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无...
2017-03-13
javascript常用的方法分享
针对现在大家平时开发中,都会写一些重复性的js处理代码,今天总结了几个比较常用的方法实现。获取get请求参数、去字符串空格。 1、获取get请求中的参数 Js代码 function getPara(para){ if(locatio...
2017-03-27
回到顶部