Como remover um elemento específico de uma matriz em javascript?

Eu tenho uma matriz de inteiros, e eu uso o método .push() para adicionar elementos a ele.

Existe uma maneira fácil de remover um item específico de uma matriz? O equivalente a algo como array.remove(int); .

Eu preciso usar o javascript básico - nenhum framework é permitido.

6774
24 апр. definir por Walker em 24 de abr 2011-04-24 01:17 '11 às 1:17 2011-04-24 01:17
@ 78 respostas
  • 1
  • 2
  • 3

Encontre o index do elemento da matriz que você deseja remover e exclua esse índice usando splice .

O método splice () altera o conteúdo de um array, excluindo elementos existentes e / ou adicionando novos elementos.

suporte do navegador para indexOf é limitado;  Não é suportado no Internet Explorer 7 e 8. 

Se você precisar de indexOf em um navegador não suportado, tente o polyfill next polyfill . Encontre mais informações sobre este polyfill aqui .

 Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) { var a; if (null == this) throw new TypeError('"this" is null or not defined'); var c = Object(this), b = c.length >>> 0; if (0 === b) return -1; a = +e || 0; Infinity === Math.abs(a)  (a = 0); if (a >= b) return -1; for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) { if (a in c  c[a] === d) return a; a++ } return -1 }); 
9765
24 апр. A resposta foi dada por Tom Wadley em 24 de abril 2011-04-24 01:23 '11 às 1:23 2011-04-24 01:23

Eu não sei como você espera que array.remove(int) irá se comportar. Existem três possibilidades que você pode pensar.

Para remover um elemento da matriz com um índice de i :

 array.splice(i, 1); 

Se você quiser remover cada item com um valor number da matriz:

border=0
 for(var i = array.length - 1; i >= 0; i--) { if(array[i] === number) { array.splice(i, 1); } } 

Se você quiser apenas criar um elemento com um índice, i não existirei mais, mas você não deseja que os índices de outros elementos sejam alterados:

 delete array[i]; 
990
24 апр. Resposta dada por Peter Olson em 24 Abr 2011-04-24 01:20 '11 às 1:20 2011-04-24 01:20

Editado em outubro de 2016

  • Simplifique, intuitivo e explícito ( https://en.wikipedia.org/wiki/Occam%27s_razor )
  • Faça-o inalterado (o array original permanecerá inalterado)
  • Faça isso com as funções padrão do JS, se o seu navegador não as suportar - use o polyfill

Neste exemplo de código, eu uso a função array.filter (...) para remover elementos indesejados de uma matriz, essa função não altera a matriz original e cria uma nova, caso seu navegador não suporte esta função (por exemplo, IE até a versão 9 ou Firefox antes versão 1.5), considere o uso do filtro de polyfill da Mozilla .

Exclusão de Itens (código ECMA-262 Edição 5, conhecido como oldstyle JS)

 var value = 3 var arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(function(item) { return item !== value }) console.log(arr) // [ 1, 2, 4, 5 ] 

Excluindo um item (código ES2015)

 let value = 3 let arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(item => item !== value) console.log(arr) // [ 1, 2, 4, 5 ] 

IMPORTANTE ES2015 "() => {}" a sintaxe da função de seta não é suportada no IE em geral, no Chrome até a versão 45, no Firefox até a versão 22, no Safari até a versão 10. Para usar a sintaxe do ES2015 em navegadores mais antigos, você pode usar o BabelJS


Excluindo vários itens (código ES2016)

Uma vantagem adicional desse método é que você pode excluir vários itens.

 let forDeletion = [2, 3, 5] let arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(item => !forDeletion.includes(item)) // !!! Read below about array.includes(...) support !!! console.log(arr) // [ 1, 4 ] 

IMPORTANTE "array.includes (...)" não é suportado no IE, Chrome até a versão 47, Firefox até a versão 43, Safari até a versão 9 e Edge até a versão 14, então aqui estão os campos da Mozilla

Remover vários elementos (javascript experimental avançado ES2018?)

 // array-lib.js export function remove(...forDeletion) { return this.filter(item => !forDeletion.includes(item)) } // main.js import { remove } from './array-lib.js' let arr = [1, 2, 3, 4, 5, 3] // :: This-Binding Syntax Proposal // using "remove" function as "virtual method" // without extending Array.prototype arr = arr::remove(2, 3, 5) console.log(arr) // [ 1, 4 ] 

50 builtins = false code = function remove (... forDeletion) {return this.filter (item =>! ForDeletion.includes (item))} vamos arr = [1, 2, 3, 4, 5, 3] // :: This-Binding Syntax Proposal // usando a função remove como "método virtual" arr = arr :: remove (2, 3, 5) console.log (arr) // [1, 4] rel = noreferrer> Tente você mesmo em BabelJS: )

Ajuda

814
19 дек. A resposta é dada por Ujeenator em 19 de dezembro. 2013-12-19 22:54 '13 às 10:54 pm 2013-12-19 22:54

Dependendo se você deseja economizar espaço vazio ou não.

Se você precisar de um espaço vazio, a remoção ficará bem:

 delete array[ index ]; 

Se você não fizer isso, você deve usar o método splice :

 array.splice( index, 1 ); 

E se você precisar do valor deste elemento, você pode simplesmente salvar o elemento retornado da matriz:

 var value = array.splice( index, 1 )[0]; 

Se você quiser fazer isso em uma ordem específica, você pode usar array.pop() para o último ou array.shift() para o primeiro (e ambos retornam o valor do elemento também).

E se você não sabe o índice de um item, você pode usar array.indexOf( item ) para obtê-lo (em if() para obter um item ou em while() para obter todos eles). array.indexOf( item ) retorna um índice ou -1 se não for encontrado.

381
24 апр. resposta dada xavierm02 24 de abr 2011-04-24 01:32 '11 às 1:32 2011-04-24 01:32

Um amigo teve um problema com o Internet Explorer 8 e mostrou-me o que ele fez. Eu disse a ele que estava errado, e ele me disse que recebeu uma resposta aqui. A resposta principal atual não funcionará em todos os navegadores (por exemplo, o Internet Explorer 8) e somente removerá a primeira ocorrência do item.

Remover todas as instâncias da matriz

 function remove(arr, item) { for (var i = arr.length; i--;) { if (arr[i] === item) { arr.splice(i, 1); } } } 

Ele se move para trás através da matriz (uma vez que os índices e o comprimento serão alterados à medida que os elementos são removidos) e exclui o elemento, caso seja encontrado. Funciona em todos os navegadores.

249
10 авг. Resposta dada por Ben Lesh 10 de agosto 2013-08-10 22:21 '13 às 10:21 pm 2013-08-10 22:21

Existem duas abordagens principais:

  • splice () : anArray.splice(index, 1);

  • delete : delete anArray[index];

Tenha cuidado ao usar excluir para uma matriz. É bom para remover atributos de objetos, mas não tão bons para matrizes. Melhor usar splice para matrizes.

Tenha em mente que quando você usa delete para um array, você pode obter resultados incorretos para anArray.length . Em outras palavras, delete exclui o elemento, mas não atualiza o valor da propriedade length.

Você também pode esperar furos nos números de índice após usar uma exclusão, por exemplo. você poderia obter índices de 1,3,4,8,9,11 e comprimento, como era antes de usar a exclusão. Nesse caso, todos os loops indexados serão divididos, pois os índices não são mais consistentes.

Se por algum motivo você tiver que usar delete , então você precisa usar for each loop quando precisar iterar através de arrays. De fato, sempre evite usar loops indexados, se possível. Assim, o código será mais confiável e menos propenso a problemas com índices.

140
21 дек. a resposta é dada Sasa 21 dec. 2012-12-21 14:32 '12 às 14:32 2012-12-21 14:32
 Array.prototype.remByVal = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] === val) { this.splice(i, 1); i--; } } return this; } //Call like [1, 2, 3, 4].remByVal(3); 

116
24 апр. a resposta é dada Zirak 24 abr. 2011-04-24 01:20 '11 às 1:20 2011-04-24 01:20

Não há necessidade de usar indexOf ou splice . No entanto, funciona melhor se você quiser remover apenas uma ocorrência do item.

Encontre e mova (movimento):

 function move(arr, val) { var j = 0; for (var i = 0, l = arr.length; i < l; i++) { if (arr[i] !== val) { arr[j++] = arr[i]; } } arr.length = j; } 

Use indexOf e splice (indexof):

 function indexof(arr, val) { var i; while ((i = arr.indexOf(val)) != -1) { arr.splice(i, 1); } } 

Use somente splice :

 function splice(arr, val) { for (var i = arr.length; i--;) { if (arr[i] === val) { arr.splice(i, 1); } } } 

Prazo de execução para nodejs para uma matriz com 1000 elementos (uma média de mais de 10.000 execuções):

O índice é cerca de 10 vezes mais lento do que em movimento. Mesmo que seja melhorado removendo a chamada indexOf em uma emenda, ela é muito pior que a movimentação.

 Remove all occurrences: move 0.0048 ms indexof 0.0463 ms splice 0.0359 ms Remove first occurrence: move_one 0.0041 ms indexof_one 0.0021 ms 
86
19 сент. A resposta é dada slasd 19 de setembro 2013-09-19 04:53 '13 às 4:53 2013-09-19 04:53

A maneira mais fácil:

 var index = array.indexOf(item); if(index != -1) array.splice( index, 1 ); 
81
02 дек. A resposta é dada por Nanego 02 dez. 2017-12-02 20:42 '17 às 8:42 pm 2017-12-02 20:42

Demasiado velho para responder, mas ele pode ajudar alguém fornecendo um predicado em vez de um valor.

OBSERVAÇÃO: ele atualizará essa matriz e retornará as linhas afetadas.

Uso de

 var removed = helper.removeOne(arr, row => row.id === 5 ); var removed = helper.remove(arr, row => row.name.startsWith('BMW')); 

Definição

 var helper = { // Remove and return the first occurrence removeOne: function(array, predicate) { for (var i = 0; i < array.length; i++) { if (predicate(array[i])) { return array.splice(i, 1); } } }, // Remove and return all occurrences remove: function(array, predicate) { var removed = []; for (var i = 0; i < array.length;) { if (predicate(array[i])) { removed.push(array.splice(i, 1)); continue; } i++; } return removed; } }; 
58
02 мая '14 в 15:00 2014-05-02 15:00 a resposta é dada a 02 de Maio de '14 às 15:00 2014-05-02 15:00

John Resig publicou uma boa implementação :

 // Array Remove - By John Resig (MIT Licensed) Array.prototype.remove = function(from, to) { var rest = this.slice((to || from) + 1 || this.length); this.length = from < 0 ? this.length + from : from; return this.push.apply(this, rest); }; 

Se você não deseja estender o objeto global, pode fazer algo como o seguinte:

 // Array Remove - By John Resig (MIT Licensed) Array.remove = function(array, from, to) { var rest = array.slice((to || from) + 1 || array.length); array.length = from < 0 ? array.length + from : from; return array.push.apply(array, rest); }; 

Mas a principal razão pela qual eu publico isso é para alertar os usuários sobre a implementação alternativa sugerida nos comentários nesta página (14 de dezembro de 2007):

 Array.prototype.remove = function(from, to){ this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to); return this.length; }; 

Parece funcionar bem no começo, mas através do processo doloroso eu descobri que não estava funcionando, tentando remover o segundo para o último elemento na matriz. Por exemplo, se você tiver uma matriz de 10 elementos e estiver tentando remover o 9º elemento com isto:

 myArray.remove(8); 

Como resultado, você obtém uma matriz de 8 elementos. Não sei porque, mas confirmei que a implementação original do John não tem esse problema.

55
30 авг. a resposta é dada Roger 30 ago. 2013-08-30 22:07 '13 às 10:07 pm 2013-08-30 22:07

O Underscore.js pode ser usado para resolver problemas com vários navegadores. Ele usa métodos internos do navegador, se houver. Se eles estão faltando, como é o caso com versões mais antigas do Internet Explorer, ele usa seus próprios métodos.

Um exemplo simples para remover elementos de uma matriz (de um site):

 _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4] 
53
30 мая '14 в 12:57 2014-05-30 12:57 a resposta é dada por vatsal em 30 de maio de '14 às 12:57 2014-05-30 12:57

Você pode fazer isso facilmente com o método de filtro :

 function remove(arrOriginal, elementToRemove){ return arrOriginal.filter(function(el){return el !== elementToRemove}); } console.log( remove([1, 2, 1, 0, 3, 1, 4], 1) ); 

Isso remove todos os elementos da matriz e também funciona mais rápido que a combinação slice e indexOf.

52
11 февр. A resposta é dada por Salvador Dali 11 de fevereiro 2014-02-11 01:06 '14 às 1:06 2014-02-11 01:06

Se você quiser excluir uma nova matriz com posições excluídas, sempre poderá excluir um elemento específico e filtrar a matriz. Talvez seja necessário expandir o objeto de matriz para navegadores que não implementam o método de filtro, mas, no longo prazo, é mais fácil, porque tudo o que você faz é o seguinte:

 var my_array = [1,2,3,4,5,6]; delete my_array[4]; console.log(my_array.filter(function(a){return typeof a !== 'undefined';})); 

Deve exibir [1, 2, 3, 4, 6]

40
18 окт. Responder Loupax 18 de out 2012-10-18 13:13 '12 às 13:13 2012-10-18 13:13

Você pode usar o ES6.

 var array=['1','2','3','4','5','6'] var index = array.filter((value)=>value!='3'); 

Saída:

 ["1", "2", "4", "5", "6"] 
37
04 окт. a resposta é dada rajat44 04 oct. 2016-10-04 11:07 '16 às 11:07 2016-10-04 11:07

Confira este código. Funciona em todos os principais navegadores. .

 remove_item = function (arr, value) { var b = ''; for (b in arr) { if (arr[b] === value) { arr.splice(b, 1); break; } } return arr; } 

Chame essa função

 remove_item(array,value); 
34
02 апр. A resposta é dada por Ekramul Hoque 02 abr. 2013-04-02 13:56 '13 às 13:56 2013-04-02 13:56

Você pode usar o lodash _. pull (matriz mutate), _.pullAt (matriz mutate) ou _. sem (não muta a matriz),

 var array1 = ['a', 'b', 'c', 'd'] _.pull(array1, 'c') console.log(array1) // ['a', 'b', 'd'] var array2 = ['e', 'f', 'g', 'h'] _.pullAt(array2, 0) console.log(array2) // ['f', 'g', 'h'] var array3 = ['i', 'j', 'k', 'l'] var newArray = _.without(array3, 'i') // ['j', 'k', 'l'] console.log(array3) // ['i', 'j', 'k', 'l'] 
32
25 авг. a resposta é dada Chun Yang 25 ago. 2015-08-25 22:34 '15 às 22:34 2015-08-25 22:34

OK, por exemplo, você tem uma matriz abaixo:

 var num = [1, 2, 3, 4, 5]; 

E nós queremos excluir o número 4, você pode apenas fazer o seguinte código:

 num.splice(num.indexOf(4), 1); //num will be [1, 2, 3, 5]; 

Se você reutilizar essa função, você escreverá uma função de reutilização que será vinculada à função de matriz nativa, como mostrado abaixo:

 Array.prototype.remove = Array.prototype.remove || function(x) { const i = this.indexOf(x); if(i===-1) return; this.splice(i, 1); //num.remove(5) === [1, 2, 3]; } 

Mas e se você tiver uma matriz abaixo e algumas [5] na matriz?

 var num = [5, 6, 5, 4, 5, 1, 5]; 

Precisamos de um loop para verificar todos eles, mas é mais fácil e mais eficiente usar as funções JavaScript integradas, portanto, escrevemos uma função que usa um filtro, conforme mostrado abaixo:

 const _removeValue = (arr, x) => arr.filter(n => n!==x); //_removeValue([1, 2, 3, 4, 5, 5, 6, 5], 5) //return [1, 2, 3, 4, 6] 

Há também bibliotecas de terceiros para ajudá-lo a fazer isso, como o Lodash ou o Underscore, para obter mais informações sobre lodash _.pull, _.pullAt ou _.woutout.

32
10 мая '17 в 12:39 2017-05-10 12:39 Resposta é dada por Alireza em 10 de maio de 17 às 12:39 2017-05-10 12:39

Eu sou novo em javascript e preciso desse recurso. Eu acabei de escrever isto:

 function removeFromArray(array, item, index) { while((index = array.indexOf(item)) > -1) { array.splice(index, 1); } } 

Então, quando eu quiser usá-lo:

 //Set-up some dummy data var dummyObj = {name:"meow"}; var dummyArray = [dummyObj, "item1", "item1", "item2"]; //Remove the dummy data removeFromArray(dummyArray, dummyObj); removeFromArray(dummyArray, "item2"); 

Saia - como esperado. ["item1", "item1"]

Você pode ter necessidades diferentes de mim, então você pode facilmente mudá-las para ajustá-las. Espero que isso ajude alguém.

27
16 янв. a resposta é dada por sofiax Jan 16 2014-01-16 14:27 '14 às 14:27 2014-01-16 14:27

ES6 e sem mutação: (outubro de 2016)

 const removeByIndex = (list, index) => [ ...list.slice(0, index), ...list.slice(index + 1) ]; 

Então:

 removeByIndex([33,22,11,44],1) //=> [33,11,44] 
24
07 окт. Resposta dada por Abdennour TOUMI Oct 07 2016-10-07 22:42 '16 às 22:42 2016-10-07 22:42

Atualização: Este método é recomendado somente se você não puder usar o ECMAScript 2015 (anteriormente conhecido como ES6). Se você puder usá-lo, outras respostas aqui fornecem muitas implementações avançadas.


Este significado aqui resolverá seu problema, assim como removerá todas as ocorrências do argumento, não apenas 1 (ou o valor especificado).

 Array.prototype.destroy = function(obj){ // Return null if no objects were found and removed var destroyed = null; for(var i = 0; i < this.length; i++){ // Use while-loop to find adjacent equal objects while(this[i] === obj){ // Remove this[i] and store it within destroyed destroyed = this.splice(i, 1)[0]; } } return destroyed; } 

Aplicação:

 var x = [1, 2, 3, 3, true, false, undefined, false]; x.destroy(3); // => 3 x.destroy(false); // => false x; // => [1, 2, true, undefined] x.destroy(true); // => true x.destroy(undefined); // => undefined x; // => [1, 2] x.destroy(3); // => null x; // => [1, 2] 
21
13 марта '13 в 12:28 2013-03-13 12:28 a resposta é dada zykadelic 13 de março de 2013 às 12:28 2013-03-13 12:28

Se você tem objetos complexos em uma matriz, você pode usar filtros? Em situações em que $ .inArray ou array.splice não é tão fácil de usar. Especialmente se os objetos forem possivelmente pequenos na matriz.

por exemplo. se você tiver um objeto com o campo Id e quiser que o objeto seja removido da matriz:

 this.array = this.array.filter(function(element, i) { return element.id !== idToRemove; }); 
20
09 апр. a resposta é dada flertar 09 abr. 2015-04-09 13:00 '15 às 13:00 2015-04-09 13:00

Aqui estão algumas maneiras de remover um elemento de uma matriz usando o javascript .

Todos os métodos descritos não alteram a matriz original e, em vez disso, criam uma nova.

Se você conhece o índice do item

Suponha que você tenha uma matriz e deseja excluir um elemento na posição i .

Uma maneira é usar slice() :

 const items = ['a', 'b', 'c', 'd', 'e', 'f'] const valueToRemove = 'c' const filteredItems = items.filter(item => item !== valueToRemove) console.log(filteredItems) 

Ele usa as funções das setas ES6. Você pode usar recursos tradicionais para oferecer suporte a navegadores mais antigos:

Por valor

Você pode procurar por inclusão dentro da função de retorno de chamada:

https://flaviocopes.com/how-to-remove-item-from-array/ ) 

20
04 мая '18 в 8:17 2018-05-04 08:17 Resposta é dada por Flavio Copes em 04 de maio '18 às 8:17 am 2018-05-04 08:17

Você nunca deve mudar um array de array. Porque contradiz o padrão de programação funcional. O que você pode fazer é criar uma nova matriz sem uma referência à matriz que você deseja modificar os dados usando o método de filter ES6;

 var myArray = [1,2,3,4,5,6]; 

Suponha que você queira remover 5 de um array, você pode simplesmente fazer assim.

 myArray = myArray.filter(value => value !== 5); 

Isso lhe dará uma nova matriz sem o valor que você deseja excluir. Então o resultado será

  [1,2,3,4,6]; // 5 has been removed from this array 

Para entender melhor, você pode ler a documentação do MDN em Array.filter https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

19
26 дек. Resposta dada por Adeel Imran 26 de dez 2017-12-26 22:32 '17 às 10:32 pm 2017-12-26 22:32

Mais moderno, o ECMAScript 2015 (anteriormente conhecido como Harmony ou ES 6). Dado:

 const items = [1, 2, 3, 4]; const index = 2; 

Então:

 items.filter((x, i) => i !== index); 

Cessão:

 [1, 2, 4] 

Você pode usar o Babel e o serviço de polyfill para que os navegadores sejam bons.

18
25 апр. a resposta é dada por bjfletcher 25 abr. 2016-04-25 13:21 '16 às 13:21 2016-04-25 13:21

Eu sei que já existem muitas respostas, mas muitas delas parecem complicar o problema. Aqui está uma maneira simples e recursiva de remover todas as instâncias de uma chave - ela chama a si mesma até que um índice seja encontrado. Sim, só funciona em navegadores com indexOf , mas é simples e pode ser facilmente preenchido.

Função autônoma

 function removeAll(array, key){ var index = array.indexOf(key); if(index === -1) return; array.splice(index, 1); removeAll(array,key); } 

Método de protótipo

 Array.prototype.removeAll = function(key){ var index = this.indexOf(key); if(index === -1) return; this.splice(index, 1); this.removeAll(key); } 
16
03 февр. A resposta é dada wharding28 03 fev. 2014-02-03 18:41 '14 às 18:41 2014-02-03 18:41

Eu tenho outra boa solução para remover de uma matriz:

 var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"] 

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

15
05 июня '18 в 17:47 2018-06-05 17:47 respondeu a Aram Grigoryan em 5 de junho '18 em 5:47 pm 2018-06-05 17:47

Você pode fazer um loop reverso para ter certeza de que não está parafusando os índices se houver várias instâncias do elemento.

 var myElement = "chocolate"; var myArray = ['chocolate', 'poptart', 'poptart', 'poptart', 'chocolate', 'poptart', 'poptart', 'chocolate'];  for (var i = myArray.length - 1; i >= 0; i--) { if (myArray[i] == myElement) myArray.splice(i, 1); } 

Demonstração ao vivo

15
12 авг. a resposta é dada por Jeff Noel 12 ago. 2013-08-12 20:56 '13 às 20:56 2013-08-12 20:56

Com base em todas as respostas que estavam corretas, e levando em conta as melhores recomendações (especialmente sem usar diretamente o Array.prototype), cheguei ao seguinte código:

 function arrayWithout(arr, values) { var isArray = function(canBeArray) { if (Array.isArray) { return Array.isArray(canBeArray); } return Object.prototype.toString.call(canBeArray) === '[object Array]'; }; var excludedValues = (isArray(values)) ? values : [].slice.call(arguments, 1); var arrCopy = arr.slice(0); for (var i = arrCopy.length - 1; i >= 0; i--) { if (excludedValues.indexOf(arrCopy[i]) > -1) { arrCopy.splice(i, 1); } } return arrCopy; } 

Analisando a função acima, apesar do fato de funcionar bem, percebi que poderia haver alguma melhora no desempenho. Além disso, usar o ES6 em vez do ES5 é uma abordagem muito melhor. Para fazer isso, esse é um código aprimorado:

 const arrayWithoutFastest = (() => { const isArray = canBeArray => ('isArray' in Array) ? Array.isArray(canBeArray) : Object.prototype.toString.call(canBeArray) === '[object Array]'; let mapIncludes = (map, key) => map.has(key); let objectIncludes = (obj, key) => key in obj; let includes; function arrayWithoutFastest(arr, ...thisArgs) { let withoutValues = isArray(thisArgs[0]) ? thisArgs[0] : thisArgs; if (typeof Map !== 'undefined') { withoutValues = withoutValues.reduce((map, value) => map.set(value, value), new Map()); includes = mapIncludes; } else { withoutValues = withoutValues.reduce((map, value) => { map[value] = value; return map; } , {}); includes = objectIncludes; } const arrCopy = []; const length = arr.length; for (let i = 0; i < length; i++) { // If value is not in exclude list if (!includes(withoutValues, arr[i])) { arrCopy.push(arr[i]); } } return arrCopy; } return arrayWithoutFastest; })();