Estou tentando remover um elemento em uma matriz em um forEach
loop, mas estou tendo problemas com as soluções padrão que vi.
Isso é o que estou tentando no momento:
review.forEach(function(p){
if(p === '\u2022 \u2022 \u2022'){
console.log('YippeeeE!!!!!!!!!!!!!!!!')
review.splice(p, 1);
}
});
Eu sei que está entrando no if
porque estou vendo YippeeeeeE!!!!!!!!!!!!!
no console.
MEU PROBLEMA: Eu sei que meu loop for e se a lógica estão corretos, mas minha tentativa de remover o elemento atual do array está falhando.
ATUALIZAR:
Tentei a resposta do Xotic750 e o elemento ainda não foi removido:
Aqui está a função em meu código:
review.forEach(function (item, index, object) {
if (item === '\u2022 \u2022 \u2022') {
console.log('YippeeeE!!!!!!!!!!!!!!!!')
object.splice(index, 1);
}
console.log('[' + item + ']');
});
Aqui está a saída em que a matriz ainda não foi removida:
[Scott McNeil]
[reviewed 4 months ago]
[ Mitsubishi is AMAZING!!!]
YippeeeE!!!!!!!!!!!!!!!!
[• • •]
Obviamente, isso vai para a instrução if conforme direcionado, mas também é óbvio que o [• • •] ainda está lá.
javascript
foreach
novicePrgrmr
fonte
fonte
forEach
? Se você deseja remover itens, a função mais adequada éfilter
.index
atributo em vez doitem
seusplice
Respostas:
Parece que você está tentando fazer isso?
Repita e modifique uma matriz usando Array.prototype.splice
O que funciona bem para o caso simples em que você não tem 2 dos mesmos valores dos itens de array adjacentes, caso contrário, você terá esse problema.
Então, o que podemos fazer sobre esse problema ao iterar e transformar um array? Bem, a solução usual é trabalhar ao contrário. Usando ES3 enquanto, mas você pode usar para açúcar, se preferir
Ok, mas você queria usar métodos de iteração ES5. Bem, a opção seria usar Array.prototype.filter, mas isso não altera o array original, mas cria um novo, portanto, embora você possa obter a resposta correta, não é o que parece ter especificado.
Também poderíamos usar ES5 Array.prototype.reduceRight , não por sua propriedade de redução ao invés de sua propriedade de iteração, ou seja, iterar ao contrário.
Ou podemos usar ES5 Array.protoype.indexOf assim.
Mas você deseja especificamente usar ES5 Array.prototype.forEach , então o que podemos fazer? Bem, precisamos usar Array.prototype.slice para fazer uma cópia superficial do array e Array.prototype.reverse para que possamos trabalhar ao contrário para transformar o array original.
Finalmente o ES6 nos oferece algumas alternativas adicionais, onde não precisamos fazer cópias rasas e revertê-las. Notavelmente, podemos usar Geradores e Iteradores . No entanto, o suporte é bastante baixo no momento.
Algo a se notar em tudo o que foi dito acima é que, se você estivesse removendo NaN do array, comparar com igual não funcionaria porque em Javascript
NaN === NaN
é falso. Mas vamos ignorar isso nas soluções, pois é mais um caso extremo não especificado.Então aí está, uma resposta mais completa com soluções que ainda têm casos extremos. O primeiro exemplo de código ainda está correto, mas, conforme declarado, não é sem problemas.
fonte
console.log(review);
depois deforEach
, como no meu exemplo.Use em
Array.prototype.filter
vez deforEach
:fonte
Embora a resposta do Xotic750 forneça vários pontos bons e soluções possíveis, às vezes simples é melhor .
Você sabe que a matriz que está sendo iterada está sofrendo mutação na própria iteração (ou seja, removendo um item => alterações de índice), portanto, a lógica mais simples é retroceder em um modo antigo
for
(à la linguagem C ):Se você realmente pensar sobre isso, a
forEach
é apenas um açúcar sintático para umfor
loop ... Então, se não está te ajudando, por favor, pare de quebrar sua cabeça contra isso.fonte
Você também pode usar indexOf para fazer isso
fonte
Eu entendi que você deseja remover da matriz usando uma condição e ter outra matriz que possui itens removidos da matriz. Está certo?
Que tal agora?
Espero que ajude ...
A propósito, comparei 'for-loop' com 'forEach'.
Se remove no caso de uma string conter 'f', o resultado é diferente.
E remova a cada iteração, também um resultado é diferente.
fonte
A seguir, você encontrará todos os elementos que não são iguais aos seus personagens especiais!
fonte
Aqui está como você deve fazer isso:
fonte
if
instrução.item, index, object