# remove
_remove(array, callback)#
移除数组中callback返回为真值的所有元素,并返回移除元素组成的数组。
注意: filter不同, 这个方法会改变数组 array。
# 参数
- array (Array): 被连接的数组。
- callback(function): 判断函数。
# 返回值
- (Array): 返回移除元素组成的新数组。
# 实现
const _remove = function(array, callback) {
const result = [];
if (!(array != null && array.length)) {
return result;
}
const { length } = array;
let i = -1;
const ids = [];
while (++i < length) {
const value = array[i];
if (callback(value, i, array)) {
result.push(value);
}
}
for (let i = 0; i < result.length; i++) {
const index = array.indexOf(result[i]);
array.splice(index, 1);
}
return result;
};
// by zy
const _remove = function(array, callback) {
const result = [];
if (!(array && array.length)) {
return result;
}
const index = -1,
indexes = [],
length = array.length;
while (++index < length) {
var value = array[index];
//在循环中如果符合函数条件,则在result数组中增加该值,并在indexes中记录索引
if (callback(value, index, array)) {
result.push(value);
indexes.push(index);
}
}
// 去除指定位置的元素
basePullAt(array, indexes);
return result;
};
# 测试
const array = [1, 2, 3, 4];
const evens = _remove(array, (n, i) => !(n % 2));
console.log(array);
// => [1, 3]
console.log(evens);
// => [2, 4]