数组增加一批新原型方法
parent
0ebe311615
commit
9fe20a39e2
|
@ -15,7 +15,13 @@
|
||||||
│ ├── .flatMap(fn) // 等价于 map(fn) -> flat(1)
|
│ ├── .flatMap(fn) // 等价于 map(fn) -> flat(1)
|
||||||
│ ├── .at(index) // 读取指定位置的元素, 负值则从后往前读
|
│ ├── .at(index) // 读取指定位置的元素, 负值则从后往前读
|
||||||
│ ├── .findLast(fn) // 查找匹配的最后一项
|
│ ├── .findLast(fn) // 查找匹配的最后一项
|
||||||
│ └── .findLastIndex(fn) // 查找匹配的最后一项的索引值
|
│ ├── .findLastIndex(fn) // 查找匹配的最后一项的索引值
|
||||||
|
│ ├── .toSorted(fn) // 数组排序, 返回一个副本(不改变原数组)
|
||||||
|
│ ├── .toReversed(fn) // 反转数组, 同样返回一个副本
|
||||||
|
│ ├── .toSpliced(fn) // 数组截取, 同样返回副本
|
||||||
|
│ ├── .with(index, newValue) // 创建一个副本,再修改副本中的元素, 返回副本
|
||||||
|
│ ├── .group(fn) // 数组分组
|
||||||
|
│ └── .groupToMap(fn) // 数组分组, 返回Map对象
|
||||||
│
|
│
|
||||||
├── Date
|
├── Date
|
||||||
│ └── .isDate(any) // 判断对象是否为 日期对象
|
│ └── .isDate(any) // 判断对象是否为 日期对象
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* 重写原生的flat方法, 性能提升5~10倍(看数组的结构)
|
* 重写原生的flat方法, 性能提升5~10倍(看数组的结构)
|
||||||
*/
|
*/
|
||||||
Object.defineProperty(Array.prototype, 'flat', {
|
Object.defineProperty(Array.prototype, 'flat', {
|
||||||
value: function(deep = 1, arr = []) {
|
value: function (deep = 1, arr = []) {
|
||||||
for (let it of this) {
|
for (let it of this) {
|
||||||
if (Array.isArray(it) && deep > 0) {
|
if (Array.isArray(it) && deep > 0) {
|
||||||
it.flat(deep - 1, arr)
|
it.flat(deep - 1, arr)
|
||||||
|
@ -22,7 +22,7 @@ Object.defineProperty(Array.prototype, 'flat', {
|
||||||
})
|
})
|
||||||
|
|
||||||
Object.defineProperty(Array.prototype, 'flatMap', {
|
Object.defineProperty(Array.prototype, 'flatMap', {
|
||||||
value: function(fn) {
|
value: function (fn) {
|
||||||
return this.map(fn).flat()
|
return this.map(fn).flat()
|
||||||
},
|
},
|
||||||
writable: true
|
writable: true
|
||||||
|
@ -30,8 +30,8 @@ Object.defineProperty(Array.prototype, 'flatMap', {
|
||||||
|
|
||||||
if (!Array.prototype.at) {
|
if (!Array.prototype.at) {
|
||||||
Object.defineProperty(Array.prototype, 'at', {
|
Object.defineProperty(Array.prototype, 'at', {
|
||||||
value: function(num) {
|
value: function (num) {
|
||||||
var n = +num
|
let n = +num
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
n += this.length
|
n += this.length
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ if (!Array.prototype.at) {
|
||||||
|
|
||||||
if (!Array.prototype.findLast) {
|
if (!Array.prototype.findLast) {
|
||||||
Object.defineProperty(Array.prototype, 'findLast', {
|
Object.defineProperty(Array.prototype, 'findLast', {
|
||||||
value: function(fn) {
|
value: function (fn) {
|
||||||
let num = this.length
|
let num = this.length
|
||||||
while (num > 0) {
|
while (num > 0) {
|
||||||
let item = this[--num]
|
let item = this[--num]
|
||||||
|
@ -57,7 +57,7 @@ if (!Array.prototype.findLast) {
|
||||||
|
|
||||||
// 没有findLast也不会有findLastIndex
|
// 没有findLast也不会有findLastIndex
|
||||||
Object.defineProperty(Array.prototype, 'findLastIndex', {
|
Object.defineProperty(Array.prototype, 'findLastIndex', {
|
||||||
value: function(fn) {
|
value: function (fn) {
|
||||||
let num = this.length
|
let num = this.length
|
||||||
while (num > 0) {
|
while (num > 0) {
|
||||||
let item = this[--num]
|
let item = this[--num]
|
||||||
|
@ -70,3 +70,83 @@ if (!Array.prototype.findLast) {
|
||||||
writable: true
|
writable: true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 最新增加的几种方法
|
||||||
|
if (!Array.prototype.toSorted) {
|
||||||
|
Object.defineProperty(Array.prototype, 'toSorted', {
|
||||||
|
value: function (fn) {
|
||||||
|
return [...this].sort(fn)
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(Array.prototype, 'toReversed', {
|
||||||
|
value: function () {
|
||||||
|
return [...this].reverse()
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(Array.prototype, 'toSpliced', {
|
||||||
|
value: function (...args) {
|
||||||
|
return [...this].splice(...args)
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(Array.prototype, 'with', {
|
||||||
|
value: function (num, val) {
|
||||||
|
let n = +num
|
||||||
|
let arr = [...this]
|
||||||
|
if (n < 0) {
|
||||||
|
n += arr.length
|
||||||
|
}
|
||||||
|
arr[n] = val
|
||||||
|
return arr
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数组分组
|
||||||
|
if (!Array.prototype.group) {
|
||||||
|
Object.defineProperty(Array.prototype, 'group', {
|
||||||
|
value: function (fn) {
|
||||||
|
let output = {}
|
||||||
|
if (typeof fn === 'function') {
|
||||||
|
for (let it of this) {
|
||||||
|
let key = fn(it)
|
||||||
|
if (output[key]) {
|
||||||
|
output[key].push(it)
|
||||||
|
} else {
|
||||||
|
output[key] = [it]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
} else {
|
||||||
|
throw Error('argument callback must be a function.')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(Array.prototype, 'groupToMap', {
|
||||||
|
value: function (fn) {
|
||||||
|
let output = new Map()
|
||||||
|
if (typeof fn === 'function') {
|
||||||
|
for (let it of this) {
|
||||||
|
let key = fn(it)
|
||||||
|
if (output.has(key)) {
|
||||||
|
output.get(key).push(it)
|
||||||
|
} else {
|
||||||
|
output.set(key, [it])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
} else {
|
||||||
|
throw Error('argument callback must be a function.')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
writable: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue