Luuman's Blog

因为有了危机感,所以会义无反顾。


  • Home

  • About

  • Archives

  • Search

JavaScript 数组方法汇总

Posted on 2018-03-25 Edited on 2019-09-21 In JavaScript

自用笔记:本文属于自用笔记,不做详解,仅供参考。
在此记录自己已理解并开始遵循的前端代码规范。What How Why

创建数组

隐式创建

1
var arr=['Audi', 'BMW', 'Volvo']

直接实例化

1
var arr=new Array('Audi', 'BMW', 'Volvo')

快速构建数组

直接构建法:

1
let arr = ['mock', 'mock', 'mock']

循环法: for循环

1
2
3
4
let arr = []
for(var i = 0;i < 3;i++){
arr.push('mock')
}

快速填充数组

1
let newArr = new Array(3).fill('mock');

构建顺序(倒序数组)

快速填充数组

1
let newArr = new Array(10).fill(1).map((item, index) => index + 1)
1
let funss = (m, n) => Array.apply(null, new Array(m)).map(() => n++)

数组最大值

es6拓展运算符…

1
2
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
Math.max(...arr)

es5 apply(与方法1原理相同)

1
2
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
Math.max.apply(null,arr)

for循环

1
2
3
4
5
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
let max = arr[0]
for (let i = 0; i < arr.length - 1; i++) {
max = arr[i] < arr[i+1] ? arr[i+1] : arr[i]
}

数组sort()

1
2
3
4
5
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
arr.sort((num1, num2) => {
return num1 - num2 < 0
})
arr[0]

数组reduce

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

1
2
3
4
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
arr.reduce((num1, num2) => {
return num1 > num2 ? num1 : num2}
)

数组去重

ES6的set

1
2
3
4
5
var arr = [-1, 1, 101, -52, 10, 1001, 1001]
console.log(Array.from(new Set(arr)))

var arr = [-1, 1, 101, -52, 10, 1001, 1001]
console.log([...new Set(arr)])

过滤push

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
```
Array.prototype.distinct = function () {
var arr = this, result = [], len = arr.length
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
j = ++i
}
}
result.push(arr[i])
}
return result
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
arra.distinct()
// [3, 4, 2, 1]

## 过滤splice
优点:简单易懂
缺点:占用内存高,速度慢

``` javascript
Array.prototype.distinct = function () {
var arr = this, len = arr.length
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
len--
j--
}
}
}
return arr
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
arra.distinct()
// [1, 2, 3, 4]

利用对象过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
Array.prototype.distinct = function () {
var arr = this, obj = {}, result = [], len = arr.length
for (i = 0; i < len; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = true;
result.push(arr[i])
}
}
return result
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
arra.distinct()
// [1, 2, 3, 4]

数组递归去重

运用递归的思想,先排序,然后从最后开始比较,遇到相同,则删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array.prototype.distinct = function () {
var arr = this, len = arr.length
arr.sort(function(a, b) {
return a - b
})
function loop(index) {
if (index >= 1) {
if (arr[index] === arr[index - 1]) {
arr.splice(index, 1)
}
loop(index - 1)
}
}
loop(len - 1)
return arr
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
arra.distinct()

利用indexOf以及forEach

1
2
3
4
5
6
7
8
9
10
11
Array.prototype.distinct = function () {
var arr = this, result = [], len = arr.length
arr.forEach(function (v, i, arr) {
if (arr.indexOf(v, i+1) === -1) {
result.push(v)
}
})
return result
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
arra.distinct()

数组合并去重

concat()方法

1
2
3
4
5
6
7
8
9
var a = [1, 2, 3];
var b = [4, 5, 2];
function concatArray(a, b) {
a = a.concat(b)
a = a.distinct()
return a
}
concatArray(a, b)
// [1, 3, 4, 5, 2]

apply()方法

1
2
3
4
5
6
7
8
9
var a = [1, 2, 3];
var b = [4, 5, 2];
function concatArray(a, b) {
Array.prototype.push.apply(a, b)
a = a.distinct()
return a
}
concatArray(a, b)
// [1, 3, 4, 5, 2]
# Array
JavaScript 算法初探
移动端调试
  • Table of Contents
  • Overview

Luuman

爱折腾,爱运动,更爱游离于错综复杂的编码与逻辑中,无法自拔。相信编程是一门艺术,自诩为游弋在代码里的人生。
92 posts
19 categories
36 tags
友情链接
  • 编程の趣
  • 翁天信
  • MOxFIVE
  • Meicai
  1. 1. 创建数组
    1. 1.1. 隐式创建
    2. 1.2. 直接实例化
    3. 1.3. 快速构建数组
      1. 1.3.1. 直接构建法:
      2. 1.3.2. 循环法: for循环
      3. 1.3.3. 快速填充数组
    4. 1.4. 构建顺序(倒序数组)
      1. 1.4.1. 快速填充数组
  2. 2. 数组最大值
    1. 2.1. es6拓展运算符…
    2. 2.2. es5 apply(与方法1原理相同)
    3. 2.3. for循环
    4. 2.4. 数组sort()
    5. 2.5. 数组reduce
  3. 3. 数组去重
    1. 3.1. ES6的set
    2. 3.2. 过滤push
    3. 3.3. 利用对象过滤
    4. 3.4. 数组递归去重
    5. 3.5. 利用indexOf以及forEach
  4. 4. 数组合并去重
    1. 4.1. concat()方法
    2. 4.2. apply()方法
广告位 广告位 广告位
© 2019 Luuman
Powered by Hexo v3.9.0
|
Theme – Nice.Gemini v7.3.0