# 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]
上次更新于: 3/23/2022, 10:11:04 AM