1. instanceof可以正确的判断对象的类型,其内部机制是通过判断对象的原型链中是不是能找到类型的prototype。
let a = ['a','b','c','d''e','f']
console.log(a instanceof Array) // true
复制代码
2. Array.isArray()
let a = ['a','b','c','d''e','f']
Array.isArray(a) // true
复制代码
3. Object.prototype.toString.call()
let a = ['a','b','c','d''e','f']
Object.prototype.toString.call(a) // [object Array]
复制代码
4. join() 方法将一个数组(或类数组对象)的所有元素连成一个字符串并返回这个字符串。且不会改变原数组。默认连接符为“,”
var elements = ['A', 'B', 'C']
console.log(elements.join()) // A,B,C
console.log(elements.join('')) // ABC
console.log(elements.join('-')) // A-B-C
复制代码
5. reverse() 方法将数组中元素的位置颠倒。此方法会改变原数组。
var elements = ['A', 'B', 'C']
elements.reverse()
console.log(elements) // ['C','B','A']
复制代码
6. sort() 方法用于对数组排序,并返回数组。默认的排序顺序是根据字符串Unicode码点。此方法会改变原数组。
var array1 = [1, 30, 4, 21];
array1.sort();
console.log(array1);// [1, 21, 30, 4]
复制代码
7. concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
var array1 = ['a', 'b', 'c']
var array2 = ['a', 'e', 'f']
console.log(array1.concat(array2)) // ["a", "b", "c", "a", "e", "f"]
复制代码
8. slice(begin,end) 方法返回一个新数组,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。
var arr = [1, 2, 3, 4, 5]
arr.slice(0) // [1, 2, 3, 4, 5]
arr.slice(1, 2) // [2]
arr.slice(1, 3) // [2, 3]
复制代码
9. splice() 方法删除现有元素或添加新元素来修改数组,并以数组返回原数组被修改的内容。
var arr = [1, 3, 4, 5]
arr.splice(1,0,2) // []
console.log(arr) // [1,2,3,4,5]
arr.splice(4,1) // [5]
console.log(arr) // [1,2,3,4]
复制代码
10. push() 方法将一个或多个元素添加到数组的末尾,并返回改数组的新长度。
var arr = [1,3,5,7]
arr.push(8) // [1,3,5,7,8]
复制代码
11. unshift() 方法将一个或多个元素加到数组的开头,并返回该数组的新长度。
var arr = [1, 2, 3]
console.log(arr.unshift(4, 5)) // 5
console.log(arr) [4, 5, 1, 2, 3]
复制代码
12. pop() 方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
var arr = [1, 2, 3]
console.log(arr.pop()) // 3
复制代码
13. shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
var arr = [1, 2, 3]
console.log(arr.shift()) // [2,3]
复制代码
14. 遍历
for in
var arr = [1, 2, 3]
for (var i in arr) {
console.log(arr[i])
}
// 1
// 2
// 3
var obj = {a:1; b:2; c:3}
for (var i in arr) {
console.log(obj[i])
}
// 1
// 2
// 3
复制代码
for of 循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象等。
const arr = [1, 2, 3];
for(let v of arr) {
console.log(v);
}
// 1
// 2
// 3
复制代码
map() 方法创建一个新数组,其结果是该数组的每一个元素都调用一个提供的函数后返回的结果。map()方法在一定程度上就是为生成新数组而生的
var arr = [1,2,3]
var mapArr = arr.map(x => x * 3)
console.log(mapArr) // [1,6,9]
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
复制代码
forEach() 方法对数组的每一个元素执行一次提供的函数。
var arr = [1,2,3]
arr.forEach(function(item,index,arr){
console.log(`arr[${index}]=${item}`)
})
// arr[0]=1
// arr[1]=2
// arr[2]=3
复制代码
15. filter() 方法创建一个新数组,此新数组包含通过所提供函数实现的测试的所有元素。
var arr = [1,2,3]
const result = arr.filter(x => x >1)
console.log(result) // [2,3]
复制代码
16. some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试(1真即真)。数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false。
var arr = [1,2,3]
var even = arr.some(x => x > 5) // false
复制代码
17. every() 方法测试数组的所有元素是否都通过了指定函数的测试(一假即为假)。
var arr = [1,2,3]
var passed = arr.every(x => x < 5) // true
复制代码
18. reduce() 方法对累计器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值。accumulator(累加器),currentValue(当前值)。此方法必须传入两个参数。
var arr = [1,2,3,4]
var reducer = arr.reduce((accumulator,currentValue) => accumulator * currentValue) // 24
复制代码
数组求和
var sum = arr.reduce((accumulator,currentValue) => accumulator + currentValue) // 10
复制代码
找出数组中最大值
var max = arr.reduce((accumulator,currentValue) => accumulator > currentValue ? accumulator : currentValue) // 4
复制代码
找出数组中最小值
var min = arr.reduce((accumulator,currentValue) => accumulator < currentValue ? accumulator : currentValue) // 1
复制代码
19. reduceRight() 方法接收一个函数作为累加器和数组的每个值(从右到左)将其减少为单个值。
const arr = [[1,2],[3,4],[5,6]]
const result = arr.recudeRight((accumulator,currentValue) => accumulator.concat(currentValue))
console.log(result) // [5,6,3,4,1,2]
复制代码
reduce()与reduceRight()的区别
var a = ['1', '2', '3', '4', '5'];
var left = a.reduce(function(prev, cur) { return prev + cur; });
var right = a.reduceRight(function(prev, cur) { return prev + cur; });
console.log(left); // "12345"
console.log(right); // "54321"
复制代码
20. 数组交换
let arr = [1,2,3]
复制代码
方法1
创建临时变量
let temp = arr[0]
arr[0] = arr[2]
arr[2] = temp
复制代码
方法2
ES6解构赋值
[arr[0],arr[2]] = [arr[2],arr[0]]
复制代码
方法3
splice方法,此方法会以数组返回原数组被修改的内容。
arr.splice(2,1, ...arr.splice(0,1, arr[2]))
注:arr.splice(0,1, arr[2]) // [1] 此时数组为 [3,2,3]
arr.splice(2,1,1) // 数组交换位置完成 [3,2,1]
复制代码