获取对象数组中,某个属性的最小值
// arr格式
[
{
price: 0,
name: 'xxx'
}
]
// 求 arr中price的最小值
arr.push({price: 0,name: ''}) // 若arr为空数组,则下面一行代码得出的结果为Infinity,因此要加一个理想的最小值
arr.map(tmp => tmp.price).reduce((min, cur) => Math.min(min, cur), Infinity)
随机生成[l, r]的整数
randomInteger (l, r) {
return Math.floor(Math.random() * (r - l + 1)) + l
},
时间戳转标准格式字符串
getFormatTime (timeStamp) {
let date = new Date(timeStamp)
let y = date.getFullYear()
let m = ('0' + (date.getMonth() + 1)).substr(-2)
let d = ('0' + date.getDate()).substr(-2)
let h = ('0' + date.getHours()).substr(-2)
let i = ('0' + date.getMinutes()).substr(-2)
let s = ('0' + date.getSeconds()).substr(-2)
// console.log(y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s)
return y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s
}
Date对象转标准格式字符串
getFormatTime (date, delimiter = '-') {
return date.toLocaleDateString().split('/').map(cur => cur.length > 1 ? cur : '0' + cur).join(delimiter) + ' ' + date.toTimeString().substring(0, 8)
}
将数字每3位用逗号分隔
直接用Number.toLocaleString()
即可
对象深拷贝
适用于循环引用的对象,参考https://juejin.cn/post/6844903998823088141
function deepCopy (obj, map) {
if (typeof obj !== 'object') {
return obj
}
let newObj = Array.isArray(obj) ? [] : {}
if (map.get(obj)) {
return map.get(obj)
}
map.set(obj, newObj)
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy(obj[key], map)
}
}
return newObj
}
变量类型判断
null、Array、Date等typeof都是object,所以不能直接使用typeof判定类型
可以使用toString后的object xxx判定
let class2type = {}
'Array Date RegExp Object Error'.split(' ').forEach(e => class2type[ '[object ' + e + ']' ] = e.toLowerCase())
function type(obj) {
if (obj == null) return String(obj)
return typeof obj === 'object' ? class2type[ Object.prototype.toString.call(obj) ] || 'object' : typeof obj
}
数组扁平化
let arr = [
[1, 2, 3],
{4: 4},
[5, [6, [{7: 7}]]],
8
]
// 方法一 递归
function flat1 (arr) {
let res = []
for (let i = 0; i < arr.length; i++) {
res = res.concat(Array.isArray(arr[i]) ? flat1(arr[i]) : arr[i])
}
return res
}
console.log(flat1(arr))
// 方法二 reduce (原理同方法一,只是代码更简洁)
function flat2 (arr) {
return arr.reduce((pre, cur) => {
console.log(pre)
return pre.concat(Array.isArray(cur) ? flat2(cur) : cur)
}, [])
}
console.log(flat2(arr))
// 方法三 Array.flat
let res = arr.flat(Infinity)
console.log(res)
// 方法四 generate+yield
function* flat4(arr) {
if (Array.isArray(arr)) {
for (let i of arr) {
yield* flat4(i)
}
} else {
yield arr
}
}
console.log([...flat4(arr)])
数组去重
let arr = [1,2,2,4,3,4,1,3,2,7,5,6,1]
// 方法一
let s = new Set(arr)
let newArr1 = [...s]
let newArr2 = Array.from(s)
let newArr3 = []
s.forEach(cur => {
newArr3.push(cur)
})
console.log(newArr1, newArr2, newArr3)
// 方法二
let arr2 = []
arr.forEach(cur => {
if (arr2.indexOf(cur) === -1) {
arr2.push(cur)
}
})
console.log(arr2)
// 方法三
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
}
}
}
console.log(arr)
网友评论