All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s
39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
'use strict'
|
||
|
||
var splice = require('../constant/splice.js')
|
||
|
||
// causes a stack overflow in V8 when trying to insert 100k items for instance.
|
||
|
||
function chunkedSplice(list, start, remove, items) {
|
||
var end = list.length
|
||
var chunkStart = 0
|
||
var parameters // Make start between zero and `end` (included).
|
||
|
||
if (start < 0) {
|
||
start = -start > end ? 0 : end + start
|
||
} else {
|
||
start = start > end ? end : start
|
||
}
|
||
|
||
remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items.
|
||
|
||
if (items.length < 10000) {
|
||
parameters = Array.from(items)
|
||
parameters.unshift(start, remove)
|
||
splice.apply(list, parameters)
|
||
} else {
|
||
// Delete `remove` items starting from `start`
|
||
if (remove) splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.
|
||
|
||
while (chunkStart < items.length) {
|
||
parameters = items.slice(chunkStart, chunkStart + 10000)
|
||
parameters.unshift(start, 0)
|
||
splice.apply(list, parameters)
|
||
chunkStart += 10000
|
||
start += 10000
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = chunkedSplice
|