String.prototype.concat()

将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回

1
2
var hello = "您好, ";
console.log(hello.concat("热烈", "欢迎访问我的博客。")); /* 您好, 热烈欢迎访问我的博客。 */

Array.prototype.concat()

将传入的数组或非数组值与原数组合并,组成一个新的数组并返回

1
2
3
4
5
var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9];
var nums = num1.concat(num2, num3);
// 组成新数组[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原数组 num1, num2, num3 未被修改

Array.prototype.push()

添加一个或多个元素到数组的末尾,并返回数组新的长度(length 属性值)

1
2
3
4
5
var sports = ["soccer", "baseball"];
var total = sports.push("football", "swimming");

console.log(sports); // ["soccer", "baseball", "football", "swimming"]
console.log(total); // 4

创建了 sports 数组,包含两个元素,然后又把两个元素添加给它。total 变量为数组的新长度值

合并两个数组

1
2
3
4
5
6
7
var arr1 = ['parsnip', 'potato'];
var arr2 = ['celery', 'beetroot'];
Array.prototype.push.apply(arr1, arr2);
// 将第二个数组合并到第一个数组
// 相当于arr1.push('celery', 'beetroot');

console.log(arr1); // ['parsnip', 'potato', 'celery', 'beetroot']

apply()``call()方法类似,还需要加强理解

使用for合并

1
2
3
4
5
6
function flatten (arr1, arr2) {
for (var i = 0; i < arr2.length; i++) {
arr1.push(arr2[i]);
}
return arr1;
}
1
2
3
4
5
6
function flatten (arr1,arr2) {
for (var i = arr1.length - 1; i >= 0; i--) {
arr2.unshift(arr1[i]);
}
return arr2;
}

两个方法结果一样。

unshift()方法在数组的开头添加一个或者多个元素,并返回数组新的 length 值


Array.prototype.reduce() | Array.prototype.reduceRight()

reduce()接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值
reduceRight()接受一个函数作为累加器(accumulator),让每个值(从右到左,亦即从尾到头)缩减为一个值。(与 reduce() 的执行方向相反)

数组所有项相加

1
2
3
4
5
6
7
8
9
10
11
//reduce()
var arr1 = [0, 1, 2, 3].reduce(function(a, b) {
return a + b;
});
// arr1 == 6

//reduceRight()
var arr2 = [0, 1, 2, 3].reduceRight(function(a, b) {
return a + b;
});
// arr2 == 6

数组扁平化

1
2
3
4
5
6
7
8
9
10
11
//reduce()
var arr1 = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
return a.concat(b);
});
// arr1的值是 [0, 1, 2, 3, 4, 5]

//reduceRight()
var arr2 = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
return a.concat(b);
}, []);
// arr2的值是 [4, 5, 2, 3, 0, 1]

合并两组数组

1
2
3
4
5
6
function flatten (arr1, arr2) {
return arr2.reduce(function(prev, curr){
prev.push(curr);
return prev;
},arr1);
}
1
2
3
4
5
6
function flatten(arr1, arr2){
return arr1.reduceRight( function (prev, curr){
prev.unshift(curr);
return prev;
},arr2);
}

数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function flatten(arr1,arr2){
var result = [];
var arr = [];

arr = arr2.reduce(function(prev, curr){
prev.push(curr);
return prev;
},arr1);

for (var i = 0; i < arr.length; i++) {
var index = arr[i];
if (result.indexOf(index) === -1) {
result.push(index);
}
}
return result;
}
flatten([1,2],[12,1,2,3,4]); // [1, 2, 12, 3, 4]

indexOf 返回给定元素能找在数组中找到的第一个索引值,否则返回-1。