一、数组去重和排序

1. 原生 JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array.prototype.unique = function(){
var arr = [], obj = {};
for(var i = 0; i < this.length; i++){
if(!obj[this[i]]){
arr.push(this[i]);
obj[this[i]] = true;
}
}
return arr;
}
var arr1 = [2, 3, 2, 'hi', 'hi'];
console.log(arr1.unique()); //[2, 3, 'hi']

[2, 4, 1, 3].sort((a, b) => a - b); //[1, 2, 3, 4]

//or
[1,2,3,1,'a',1,'a'].filter((v, i, arr) => i === arr.indexOf(v));
2. Lodash ( v4.4.0 )
1
2
3
4
5
_.uniq([2, 3, 2, 'hi', 'hi']); //[2, 3, 'hi']
_.sortBy([2, 4, 1, 3, 3]); //[1, 2, 3, 3, 4]

//排序并去重
_.uniq(_.sortBy([2, 4, 1, 3, 3])); //[1, 2, 3, 4]
3. 使用set对象

[...new Set(array)]


二、数组求和(可接收任意多个参数)

1. 使用 for…of 循环
1
2
3
4
5
6
7
8
9
function addUp() {
let total = 0;
for(let num of arguments) {
total += num;
}
return total;
}

addUp(1, 2, 3, 4); // 10
2. 使用 Array.from & reduce
1
2
3
4
5
6
function addUp() {
const nums = Array.from(arguments);
return nums.reduce((prev, next) => prev + next, 0)
}

addUp(1, 2, 3, 4); // 10

三、求数组最大元素

1
2
3
4
5
6
7
8
// ES5的写法
Math.max.apply(null, [14, 3, 77])

// ES6的写法
Math.max(...[14, 3, 77])

// 等同于
Math.max(14, 3, 77)

四、将一个数组添加到另一个数组的尾部

1
2
3
4
5
6
7
8
9
10
11
12
// ES5的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
Array.prototype.push.apply(arr1, arr2);

// ES6的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2);

// or
var arr3 = [...arr1, ...arr2]

五、类数组转数组

1
2
3
4
5
<div class="people">
<p>Jay</p>
<p>Eason</p>
<p>David</p>
</div>
1
2
3
const people  = Array.from(document.querySelectAll('.people p'));
const names = people.map(person => person.textContent);
console.log(names); // ['Jay', 'Eason', 'David']