kzen.dev
  • Perguntas
  • Etiquetas
  • Utilizadores
Notificações
Recompensas
Inscrição
Uma vez registado, será notificado das respostas e comentários às suas perguntas.
Entrar
Se já tem uma conta, inicie sessão para verificar novas notificações.
Haverá recompensas por perguntas, respostas e comentários adicionais.
Mais
Fonte
Editar
Tamas Czinege
Tamas Czinege
Question

Remover elementos vazios de um array em Javascript

Como posso remover elementos vazios de um array em JavaScript?

Existe uma maneira simples, ou preciso de fazer um loop através dele e removê-los manualmente?

987 2008-11-11T15:48:54+00:00 3
Josh Lee
Josh Lee
Pergunta editada :em
Programação
arrays
javascript
node.js
Popular videos
Remover mais de um item de um array JavaScript
Remover mais de um item de um array JavaScript
há 1 ano
JavaScript Tutorial: Removing a specific element from an array | JavaScript Basics, Learn JavaScript
JavaScript Tutorial: Removing a specific element from an array | JavaScript Basics, Learn JavaScript
há 2 anos
Como Remover Elementos e Objetos do Array  - Curso de Javascript Puro Orientado a Objetos Aula 5
Como Remover Elementos e Objetos do Array - Curso de Javascript Puro Orientado a Objetos Aula 5
há 1 ano
« Anterior
Próximo »
Esta pergunta tem 1 resposta em inglês, para as ler iniciar sessão à sua conta.
Solution / Answer
 CMS
CMS
11º novembro 2008 в 4:12
2008-11-11T16:12:59+00:00
Mais
Fonte
Editar
#8627677

EDIT: Esta pergunta foi respondida há quase nove anos, quando não existiam muitos métodos úteis incorporados no `Array.prototype'.

Agora, certamente, eu recomendaria que você utilizasse o método filtro.

Tenha em mente que este método lhe devolverá uma nova matriz com os elementos que passam o critério da função de retorno de chamada que você fornece a ela.

Por exemplo, se você quiser remover valores 'nulos' ou 'indefinidos':

var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];

var filtered = array.filter(function (el) {
  return el != null;
});

console.log(filtered);

Dependerá do que você considera "vazio", por exemplo, se você estivesse lidando com cordas, a função acima não removeria elementos que são uma corda vazia.

Um padrão típico que eu vejo frequentemente utilizado é remover elementos que são falsy, que incluem uma string vazia "",0,NaN,null,undefined, efalse`.

Você pode passar para o método "filtro", a função "booleano" do construtor, ou retornar o mesmo elemento na função critério do filtro, por exemplo:

var filtered = array.filter(Boolean);

Ou

var filtered = array.filter(function(el) { return el; });

Em ambos os casos, isso funciona porque o método filtro no primeiro caso, chama o construtor Booleano como uma função, convertendo o valor, e no segundo caso, o método filtro internamente transforma o valor de retorno da callback implicitamente em Booleano.

Se você está trabalhando com arrays esparsos, e está tentando se livrar dos "buracos", você pode usar o método filtro passando uma chamada de retorno que retorna verdadeiro, por exemplo:

var sparseArray = [0, , , 1, , , , , 2, , , , 3],
    cleanArray = sparseArray.filter(function () { return true });

console.log(cleanArray); // [ 0, 1, 2, 3 ]

Resposta antiga: Não faças isso!

Eu uso este método, estendendo o protótipo de Array nativo:

Array.prototype.clean = function(deleteValue) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == deleteValue) {         
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};

test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);

Ou você pode simplesmente empurrar os elementos existentes para outra matriz:

// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
  var newArray = new Array();
  for (var i = 0; i < actual.length; i++) {
    if (actual[i]) {
      newArray.push(actual[i]);
    }
  }
  return newArray;
}

cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);
 CMS
CMS
Resposta editada :em
849
0
Jason Bunting
Jason Bunting
11º novembro 2008 в 4:03
2008-11-11T16:03:56+00:00
Mais
Fonte
Editar
#8627670

Você pode achar mais fácil fazer loop sobre seu array e construir um novo array fora dos itens que você quer manter do array do que tentando fazer loop e splice como foi sugerido, já que modificar o comprimento do array enquanto ele está sendo feito loop sobre pode introduzir problemas.

Podias fazer algo assim:

function removeFalsyElementsFromArray(someArray) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index++) {
        if(someArray[index]) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

Na verdade, esta é uma solução mais genérica:

function removeElementsFromArray(someArray, filter) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index++) {
        if(filter(someArray[index]) == false) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

// then provide one or more filter functions that will 
// filter out the elements based on some condition:
function isNullOrUndefined(item) {
    return (item == null || typeof(item) == "undefined");
}

// then call the function like this:
var myArray = [1,2,,3,,3,,,,,,4,,4,,5,,6,,,,];
var results = removeElementsFromArray(myArray, isNullOrUndefined);

// results == [1,2,3,3,4,4,5,6]

Você tem a idéia - você poderia então ter outros tipos de funções de filtragem. Provavelmente mais do que você precisa, mas eu estava me sentindo generoso... ;)

Jason Bunting
Jason Bunting
Resposta editada :em
8
0
 Matty
Matty
11º novembro 2008 в 3:58
2008-11-11T15:58:17+00:00
Mais
Fonte
Editar
#8627649

Experimenta isto. Passa o teu array e ele voltará com os elementos vazios removidos. *Atualizado para endereçar o bug apontado por Jason

function removeEmptyElem(ary) {
    for (var i = ary.length - 1; i >= 0; i--) {
        if (ary[i] == undefined)  {
            ary.splice(i, 1);
        }       
    }
    return ary;
}
 blurfus
blurfus
Resposta editada :em
-4
0
Comunidades relacionadas 4
JavaScript Brasil
JavaScript Brasil
8 129 utilizadores
Grupo técnico sobre Javascript. 💰 Vagas @javascriptbrvagas 🎯 Regras Sem off-topic Sem propaganda Sem ofensas, palavrões e xingamentos Sem pirataria Evite colar códigos longos 🆘 /admins Parceiros @frontendBR @GuiaDev @WebDevBR @mundoJS
Abrir telegram
Node.js Brasil
Node.js Brasil
5 010 utilizadores
Chat Oficial do Grupo Node.js Brasil
Abrir telegram
JavaScript Brasil Vagas
JavaScript Brasil Vagas
3 346 utilizadores
Canal para divulgação de vagas relacionadas à linguagem de programação JavaScript (e tecnologias afins). Vagas de TypeScript: https://t.me/typescriptbr Participe do nosso grupo sobre JS: @javascriptbr
Abrir telegram
Node JS Brasil 🔰
Node JS Brasil 🔰
114 utilizadores
Abrir telegram
Adicionar pergunta
Categorias
Todos
Tecnologia
Cultura / Recreação
Vida / Artes
Ciência
Profissional
Negócios
Utilizadores
Todos
Novo
Popular
1
Mansur Zakirov
Registrado há 1 dia
2
Тагир Мамедов
Registrado há 3 dias
3
Алексей Толманов
Registrado há 3 dias
4
Valeriu Vodnicear
Registrado há 1 semana
5
Alex Johnson
Registrado há 2 semanas
BG
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
SL
TR
ZH
© kzen.dev 2023
Fonte
stackoverflow.com
sob licença cc by-sa 3.0 com atribuição