Object类型
new操作符
const a = new A()
相当于
const a = {}
a.__proto__ = A.prototype
A.call(a)
实例函数
- hasOwnProperty(propertyName) -- 不会检查实例对象原型链上的属性
- propertyIsEnumerable(propertyName) -- 是否为实例属性并且是否是可枚举的
静态函数
- Object.create()
- Object.defineProperties()
- Object.getOwnPropertyNames()
- Object.keys()
Array类型
判断一个变量是数组还是对象
- instanceof
- 判断构造函数
const a = [1,2,3]
a.constructor === Array
a.__proto__.constructor === Array
- toString()
const a = [1,2,3]
Object.prototype.toString.call(a) // [object Array]
- Array.isArray()
reduce()方法
reduce()函数的主要作用是做累加处理,即接收一个函数作为累加器,将数组中的每一个元素从左到右一次执行累加器,返回最终的处理结果。
arr.reduce(callback[, initialValue])
callback(accumulator, currentValue, currentIndex, array)
accumulator表示上一次调用累加器的返回值
currentValue表示数组正在处理的值
- 求数组每个元素相加的合
const arr = [1,2,3]
const sum = arr.reduce((accumulator, currentValue) => { return accumulator + currentValue} , 0)
- 统计数组中每个元素出现的次数
const countOccurrences = (arr) => {
return arr.reduce((accumulator, currentValue) => {
accumulator[currentValue] ? accumulator[currentValue]++ : accumulator[currentValue] = 1
return accumulator
}, {})
}
求数组的最大值和最小值
- 通过prototype属性拓展min()函数和max()函数
- 借助Math对象的min()函数和max()函数
- 借助Array类型的reduce()函数
- 借助Array类型的sort()函数
- 拓展运算符
Math.max(...arr)
Math.min(...arr)
数组遍历方法
- for
- forEach()
- map()
- filter()
- some() every()
- reduce()
- find()
数组去重
- 数组遍历 - 新建一个数组,对传入的数组进行遍历。
- 对象键值对
- 先排序,再去重
- 优先遍历数组
function arrayUnique(array) {
const result = []
for (let i = 0, l = array.length; i < array.length; i++) {
for(let j = 0; j < l; j++) {
if(array[i] === array[j]) {
j = ++i
}
}
result.push(array[i])
}
return result
}
5.reduce()函数
// 注意数据类型。对于object的key来说, 1和'1'没有区别。最好增加一个type的判断,此处省略。(Map数据类型能避免这个问题)
function arrayUnique(array) {
const obj = {}
return array.reduce((prev, cur) => {
if(!obj[cur]){
prev.push(cur)
}
return prev
}, [])
}
- Set数据结构
Array.from(new Set(array))
- Map数据结构
function arrayUnique(array){
const map = new Map()
return array.filter(item => !map.has(item) && map.set(item, 1)
}
找出数组中出现次数最多的元素
- 键值对
- reduce()函数
function findMost(){
let maxEle = ''
let maxNum = 1
const obj = arr.reduce((prev, cur)=>{
prev[cur] ? prev[cur]++: prev[cur] = 1
if(prev[cur] > maxNum){
maxEle = cur
maxNum++
}
return prev
}, {})
return {maxEle, maxNum}
}