有效使用数组方法

数组方法

数组是日常开发中最常用的一个数据结构。在前后端的开发中,会有大量地数组的操作。所以,学好JavaScript中的数组的方法是多么的重要。

我在最近逛segmentfault的时候,发现很多大佬用数组的迭代方法和缩小方法是那么的方便。下面将介绍如何用这些方法来代替冗长的JavaScript代码。

像Array的栈方法,队列方法,splice,slice,sort,concat等等这些基础的方法就不举例子了。

案例1:数组筛选

题目: 筛选出数组中值大于20的。这种场景十分常见,前端从后端获取数据后,可能需要对数据进行筛选来展示。

var arr = [1,2,3,42,11,123,212,10,0]
var bigArr = [];
for (var i=0,leng=arr.length;i 20) {
      bigArr.push(arr[i])
  }
} // 最容易想到的方法。

学习了ES6之后

var arr = [1,2,3,42,11,123,212,10,0]
var bigArr = [];
for (let i of arr) {
    if(i > 20) {
      bigArr.push(i)
  }
} // 其实和上面的方法是非常类似的

ES6与数组的方法配合使用对于开发者而言是如虎添翼的。
使用Array的迭代方法 filter (filter可以过滤出代码体内返回true的数组项组成的数组)

var arr = [1,2,3,42,11,123,212,10,0]
var bigArr = arr.filter(item => item > 20) // 只要一行代码,实现了上面三四行代码的功能

案例2:工厂产品是否合格

题目2: 工厂出产了一批产品,产品重量大于1000g或者少于900g,那么产品是不合格的。现在工厂刚刚出产了一批产品,请检测这批产品是否都是合格的。

let arr1 = [999,980,890,922,910,930,999,1000]
let flag = true
for (let i = 0, leng = arr1.length; i < leng; i++) {
  if (arr1[i] > 1000 || arr1[i] < 990) {
    flag = false
  }
} // 同样,这也是最容易想到的方法。

使用数组的every方法

let arr1 = [999,980,890,922,910,930,999,1000]
let flag = true
flag = arr1.every((item) => (item<=1000 && item>=900))  // 同样是一行

同样,我们也可以用some方法来检测

flag = !arr1.some(item => item>1000 || item<900) // 同样是一行代码

同时,还可以采用filter方法找出不合格的产品。这一类场景同样很常见

案例3 :奇偶数不同处理

在处理后端传来的数据时,经常会有区别处理的情况。
题目,将下面的数组中奇数乘2,偶数不变

let arr1 = [999,980,890,922,910,930,999,1000]

普通的方法就不写了。逻辑很容易理清楚

利用数组的map方法对数组中的每一项进行一些处理

let arr2 = arr1.map(item => item%2 === 1? item *2 : item)  // 同样使用了一行代码就可以完成这个操作

案例4:返回一个对象,属性为数组中的项,值为该项出现的次数

这是我在segmentfault上面看到的一道题。我先写下我当时想到的处理方法:

let arr = ['a', 'b', 'c', 'a', 'd', 'a', 'a']
let obj = {};
for (let i = 0,leng = arr.length; i

然后,我看到了一位大佬使用reduce方法
reduce方法接受四个参数和一个额外参数,如图为reduce方法参数详解:


reduce.png

于是,我用reduce方法自己写了一个:

  let obj = arr.reduce((p,c) => {
    p[c]?p[c]++:p[c]=1
    return p
  },{}) // 看起来已经很简洁了。

大佬的代码:

  obj = arr.reduce((p, cur) => (p[cur]++ || (p[cur] = 1),p),{}) // 利用逗号运算符和||运算符简化了更多。

所以,有效地使用数组方法会大大减少我们写的代码量。让代码更加优雅

你可能感兴趣的:(有效使用数组方法)