DEV Community

Cover image for Recriando o método lodash pull() em vanilla JS
doug-source
doug-source

Posted on

Recriando o método lodash pull() em vanilla JS

Nota: apenas traduzi o texto abaixo e postei aqui.

Apenas por diversão, comecei a examinar métodos em lodash e a criar equivalentes vanilla JS.

Hoje, vamos recriar o método lodash _.pull() com vanilla JS.

O que esse método faz

O método _.pull() pega um array e remove quaisquer valores que match ao que você passa.

var array = ['a', 'b', 'c', 'a', 'b', 'c'];
_.pull(array, 'a', 'c');

// Loga ['b', 'b']
console.log(array);
Enter fullscreen mode Exit fullscreen mode

Um método pull() vanilla JS

Para este, usaremos o método Array.filter().

Primeiro, vamos criar um método helper pull(). Ao contrário da versão lodash, passaremos um array para valores.

var pull = function (array, values) {
    // Faça coisas...
};
Enter fullscreen mode Exit fullscreen mode

A seguir, chamaremos o método Array.filter() no array que foi passado.

var pull = function (arr, values) {
    return arr.filter(function (item) {
        // Faça coisas...
    });
};
Enter fullscreen mode Exit fullscreen mode

Por fim, verificaremos se o item atual está no array de valores a serem removidos usando o método Array.indexOf().

Se o método for maior que 0, retornaremos um valor false. Caso contrário, retornaremos um valor true.

var pull = function (arr, values) {
    return arr.filter(function (item) {
        return values.indexOf(item) < 0;
    });
};

// versão sem o uso de filter
var pullNoFilter = function (arr) {
    var output = arr.concat([]);
    for (var i = 1; i < arguments.length;i++) {
        var item = arguments[i];
        do {
           var index = output.indexOf(item);
           index > -1 && output.splice(index, 1);
        } while (index > -1);
    }
    return output;
};
Enter fullscreen mode Exit fullscreen mode

Ao contrário da versão lodash, isso retorna um novo immutable array, então precisaremos atribuí-lo a uma variável.

Agora podemos fazer isso.

var array = ['a', 'b', 'c', 'a', 'b', 'c'];
var pulled = pull(array, ['a', 'c']);

// Loga ['b', 'b']
console.log(pulled);
Enter fullscreen mode Exit fullscreen mode

Fonte

Newsletter de Go Make Things

Top comments (0)