Array.prototype.map() to apply the iterator function fn to all array elements.Array.prototype.filter() and Array.prototype.includes() to pull out the values that are not needed.Array.prototype.length to mutate the passed in an array by resetting its length to 0.Array.prototype.push() to re-populate it with only the pulled values.const pullBy = (arr, ...args) => {
const length = args.length;
let fn = length > 1 ? args[length - 1] : undefined;
fn = typeof fn == 'function' ? (args.pop(), fn) : undefined;
let argState = (Array.isArray(args[0]) ? args[0] : args).map(val => fn(val));
let pulled = arr.filter((v, i) => !argState.includes(fn(v)));
arr.length = 0;
pulled.forEach(v => arr.push(v));
};
var myArray = [{ x: 1 }, { x: 2 }, { x: 3 }, { x: 1 }]; pullBy(myArray, [{ x: 1 }, { x: 3 }], o => o.x); // myArray = [{ x: 2 }]
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️