LendAndRegret/node_modules/es-toolkit/dist/compat/array/pullAllWith.mjs
2026-05-02 17:27:43 +08:00

34 lines
1.0 KiB
JavaScript

import copyArray from '../_internal/copyArray.mjs';
import { isEqualsSameValueZero } from '../../_internal/isEqualsSameValueZero.mjs';
function pullAllWith(array, values, comparator) {
if (array?.length == null || values?.length == null) {
return array;
}
if (array === values) {
values = copyArray(values);
}
let resultLength = 0;
if (comparator == null) {
comparator = (a, b) => isEqualsSameValueZero(a, b);
}
const valuesArray = Array.isArray(values) ? values : Array.from(values);
const hasUndefined = valuesArray.includes(undefined);
for (let i = 0; i < array.length; i++) {
if (i in array) {
const shouldRemove = valuesArray.some(value => comparator(array[i], value));
if (!shouldRemove) {
array[resultLength++] = array[i];
}
continue;
}
if (!hasUndefined) {
delete array[resultLength++];
}
}
array.length = resultLength;
return array;
}
export { pullAllWith };