Tengo un array de números, y estoy usando el .push()
método para agregar elementos a la misma.
Hay una forma sencilla de quitar un elemento específico de una matriz? El equivalente de algo como array.remove(number);
.
Tengo que usar núcleo JavaScript – marcos no están permitidos.
- Si usted necesita apoyo <IE9 (suspiro), a continuación, compruebe de este MODO la pregunta con respecto a
indexOf
en IE. - (lodash) array = [‘a’, ‘b’, ‘c’]; _.tire(array, ‘a’) // array => [‘b’, ‘c’]; Ver también stackoverflow.com/questions/5767325/…
- método de filtro puede hacer lo que quiera.
- Usted puede utilizar eliminar pero no rearange el índice en lugar de ello establecer esta ranura para ‘undefined × 1’. Por ejemplo: var lista = [1,2,3,4,5,6] -> eliminar de la lista[1] -> [1, indefinido × 1, 3, 4, 5, 6].
delete
debe ser más eficientes en el corto plazo, porque no va a tener que pasar la tarde de los elementos.forEach
,map
yfilter
automáticamente omitir el procesamiento de indefinido (borrado) de los elementos. Pero probablemente no es ideal si va a añadir un montón de cosas a su matriz, en el futuro, o leer muchas veces.- Aquí una comparativa del rendimiento de los dos grandes posibilidades: jsben.ch/#/b4Ume
- Yo uso este que con seguridad se extiende a la matriz nativa objeto y maneja casos de borde.
Encontrar el
index
de la matriz de elemento que desea eliminar el uso deindexOf
y, a continuación, quitar ese índice conempalme
.JS:
El segundo parámetro de
splice
es el número de elementos a eliminar. Tenga en cuenta quesplice
modifica la matriz en su lugar y devuelve una nueva matriz que contiene los elementos que se han eliminado.delete
función de la matriz de prototipo. Me he tomado el uso de su ejemplo en un gist que elimina todos los elementos de la matriz en lugar de sólo 1.delete
en una matriz es no ir en IE 8. He actualizado la esencia utilizardestroy
lugar.Array.indexOf()
no prueba por objeto la igualdad. Sólo funciona si pasa exactamente el mismo objeto de referencia. Ver: jsfiddle.net/b0e7zsm3while(myarry.lenth--)
. La razón es «la matriz es volver a ser indexados al hacer una .splice(), que significa que usted va a saltar encima de un índice cuando uno se retira, y su caché .la longitud es obsoleto.» stackoverflow.com/a/9882349/922522delete arname [index];
?Math.abs(a) && (a = 0)
y haciendo algo increíble otras cosas que implican>>>
?array.splice()
función no funciona si mi índice es símbolo con una longitud de 16 ydelete arname [index];
está trabajando para míTheArray.map(function(e) {return e.property;}).indexOf(PROPERTY_VALUE_TO_SEARCH)
(IE 9+), oTheArray.map(e => e.property).indexOf(PROPERTY_VALUE_TO_SEARCH)
si tu navegador soporta Flecha Functons.indexOf
sólo devolverá la posición de la primera encontrado coincidencia (de opcional «fromIndex»).delete
miJSON.stringify
tiene un valor null en lugar de que se eliminan losindexOf()
nunca devolverá un número negativo otros que-1
así!= -1
o!== -1
estaría perfectamente bien. Sin ninguna razón en particular para el uso de> -1
.No sé de qué estás esperando
array.remove(int)
comportarse. Hay tres posibilidades que puedo pensar que usted podría querer.Para eliminar un elemento de un array en un índice
i
:Si desea eliminar todos los elementos con valor
number
de la matriz:Si lo que desea es hacer el elemento en el índice
i
ya no existen, pero no desea que los índices de los otros elementos para el cambio:delete
no es la manera correcta de eliminar un elemento de un array!array.hasOwnProperty(i)
devuelvefalse
y tiene un elemento en esa posición de retornoundefined
. Pero debo admitir que eso no es algo muy común que queramos hacer.delete
no actualización de la longitud de la matriz ni realmente elimina el elemento, sólo se reemplaza con el valor especialundefined
.undefined
: elimina el índice y el valor de la matriz, es decir, después dedelete array[0]
,"0" in array
devolverá false.var array=[];array['red']=1;array['green']=2;array['blue']=3;delete array['green'];
array[i] = null
es favorecido en lugar dedelete array[i]
delete array[i]
para asumir los índices de los elementos restantes se han actualizadodelete
operación, y sólo copiar ciegamente en su código, ya que se ve sobre el derecho a ellas. Eso no es bueno! Votada abajo.delete
hace entender por qué no funciona como se espera.Editado en el año 2016 octubre
En este ejemplo de código que uso «de la matriz.filtro(…)» función para eliminar elementos no deseados de la matriz. Esta función no cambia la matriz original y crea una nueva. Si su navegador no soporta esta función (por ejemplo, Internet Explorer anteriores a la versión 9, o Firefox antes de la versión 1.5), considere el uso de el filtro relleno de Mozilla.
La eliminación de elemento (ECMA-262 Edición 5 código aka oldstyle JavaScript)
La eliminación de elemento (ECMAScript 6 código)
IMPORTANTE ECMAScript 6 «() => {}» flecha sintaxis de la función no se admite en Internet Explorer a todos, Chrome antes de los 45 versión, Firefox antes del 22 de versión, y Safari antes de las 10 de la versión. El uso de ECMAScript 6 sintaxis en navegadores antiguos, puede utilizar BabelJS.
La eliminación de elementos múltiples (ECMAScript 7 código)
Una ventaja adicional de este método es que puede eliminar varios elementos
IMPORTANTE «de la matriz.incluye(…)» la función no se admite en Internet Explorer a todos, Chrome antes de 47 versión, Firefox antes de 43 versión, Safari antes de las 9 de la versión, y el Borde antes de las 14 versión para aquí está relleno de Mozilla.
La eliminación de varios elementos (en el futuro, tal vez)
Si el «Esta Unión De La Sintaxis» propuesta es cada vez aceptado, usted será capaz de hacer esto:
Pruebe usted mismo en BabelJS 🙂
Referencia
filter
debe ser mucho más lento para una gran variedad, aunque?let arr = arr2 = [1,3,2];
y haciendo que el filtroarr = arr.filter(el => el !==3)
resultará en ninguna modificación en arr2, mientras se hace el empalme, ambas matrices tendrán que ser modificadas.[1,2,3,3,4,5].filter(num => num == 3)
se retire ambos valores de3
includes
es ECMAScript 2016 Specfilter
puede tener un rendimiento más lento, pero es más seguro y mejor código. También, usted puede filtrar por índice especificando un segundo argumento en el lambda:arr.filter((x,i)=>i!==2)
Depende de si usted desea mantener un punto vacío o no.
Si quieres una ranura vacía, eliminar esta bien:
Si no, usted debe utilizar el empalme método:
Y si se necesita el valor de ese elemento, sólo se puede almacenar el array devuelto del elemento:
En caso de querer hacerlo en un poco de orden, puede utilizar
array.pop()
para los últimos uno oarray.shift()
para el primero (y devuelven el valor del elemento demasiado).Y si no sabes el índice del elemento, puede utilizar
array.indexOf(item)
conseguirlo (en unif()
para obtener un artículo o en unwhile()
para llegar a todos ellos).array.indexOf(item)
devuelve el índice o -1 si no se encontró.var value
no va a almacenar el valor, sino una matriz que contiene el valor.delete
no es la manera correcta de eliminar un elemento de un array!!array[index] = undefined;
. El uso dedelete
va a destruir la optimización.Un amigo estaba teniendo problemas en Internet Explorer 8 y me mostró lo que él hizo. Yo le dije que estaba mal, y él me dijo que él tiene la respuesta aquí. Esta vez la respuesta no va a funcionar en todos los navegadores (Internet Explorer 8 por ejemplo), y que sólo va a quitar la primera ocurrencia del elemento.
Eliminar TODAS las instancias de una matriz
Recorre la matriz hacia atrás (desde índices de longitud y va a cambiar a medida que se eliminan los elementos) y se elimina el elemento, si se encuentra. Funciona en todos los navegadores.
i = arr.length -1
oi--
lo que es igual a la de max índice.arr.length
es sólo un valor inicial parai
.i--
siempre será truthy (y la reducción de 1 en cada bucle op) hasta que equivale a0
(un falsy valor) y el bucle se detendrá.arr.filter(function (el) { return el !== item })
, evitando así la necesidad de mutar la matriz varias veces. Esto consume un poco más de memoria, pero opera de manera mucho más eficiente, ya que hay menos trabajo que necesita ser hecho.es5-shim.js
en su aplicación.Hay dos enfoques principales:
splice():
anArray.splice(index, 1);
eliminar:
delete anArray[index];
Tener cuidado cuando se utiliza para eliminar una matriz. Es bueno para eliminar los atributos de los objetos, pero no tan bueno para las matrices. Es mejor utilizar
splice
para las matrices.Tenga en cuenta que cuando se utiliza
delete
para una matriz se puede obtener malos resultados paraanArray.length
. En otras palabras,delete
eliminaría el elemento, pero no actualizar el valor de la longitud de la propiedad.También se puede esperar a tener agujeros en los números de índice después de eliminar el uso de, por ejemplo, usted podría terminar encima de tener los índices de 1, 3, 4, 8, 9, y 11 y la longitud como estaba antes de utilizar eliminar. En ese caso, todos los indexados
for
bucles de accidente, ya que los índices no son secuenciales.Si se ve forzado a usar
delete
por alguna razón, entonces usted debe utilizarpara cada
bucles cuando usted necesita un bucle a través de matrices. Como cuestión de hecho, siempre evite el uso de indexadofor
bucles, si es posible. De esa manera, el código sería el más robusto y menos propensos a tener problemas con los índices.JS:
for in
en una matriz, usted ya tiene un problema.for in
en las matrices, que ya tienen problemas más grandes.No hay necesidad de utilizar
indexOf
osplice
. Sin embargo, funciona mejor si usted sólo desea quitar una ocurrencia de un elemento.Encontrar y mover (move):
Uso
indexOf
ysplice
(porcentaje):Utilizar sólo
splice
(empalme):Los tiempos de ejecución en nodejs para la matriz con 1000 elementos (un promedio de más de 10000 carreras):
indexof es aproximadamente 10 veces más lento que mover. Incluso si mejoró mediante la eliminación de la llamada a
indexOf
en empalme se realiza mucho peor que mover.Esto proporciona un predicado en lugar de un valor.
NOTA: es la actualización de la matriz dada, y el retorno a las filas afectadas.
Uso
Definición
John Resig publicado una buena aplicación:
Si usted no desea extender un objeto global, usted puede hacer algo como lo siguiente, en lugar de:
Pero la principal razón por la que estoy publicando esto es para advertir a los usuarios frente a la alternativa de implementación sugerido en los comentarios en la página (Dec 14, 2007):
Parece que funciona bien al principio, pero a través de un proceso doloroso que he descubierto se produce un error al intentar eliminar el último elemento de una matriz. Por ejemplo, si usted tiene un 10-elemento de la matriz y de intentar quitar el 9 de elemento con esto:
Usted termina con una de 8 elementos de la matriz. No sé por qué, pero me confirmó Juan de la implementación original no tiene este problema.
Object.prototype.hasOwnProperty
siempreUnderscore.js puede ser usado para resolver problemas con varios navegadores. Se utiliza en construir métodos de explorador si está presente. Si están ausentes, como en el caso de mayores de Internet Explorer versiones usa sus propios métodos.
Un ejemplo sencillo para eliminar elementos de la matriz (de la web):
Usted puede hacerlo fácilmente con la filtro método:
Esto elimina todos los elementos de la matriz y también funciona más rápido que una combinación de
slice
yindexOf
.Puede utilizar ES6. Por ejemplo, para eliminar el valor ‘3’ en este caso:
De salida :
Si quieres un nuevo array con el borrado de las posiciones eliminado, siempre se puede eliminar el elemento específico y filtro de salida de la matriz. Es posible que tenga una extensión de la objeto array para los navegadores que no implementan el método de filtro, pero en el largo plazo es más fácil ya que todo lo que hago es esto:
Debe mostrar
[1, 2, 3, 4, 6]
.Echa un vistazo a este código. Funciona en todos los navegador principales.
Llamar a esta función
for in
de bucle y el hecho de que el guión podría detuvo anteriormente, devolviendo el resultado del bucle directamente. El upvotes son razonables 😉for( i = 0; i < arr.length; i++ )
sería un mejor enfoque, ya que se conserva la exacta índices frente a cualquier orden de la navegador decide almacenar los elementos (confor in
). Al hacerlo, también te permite obtener el índice de la matriz de un valor si la necesita.Puede utilizar lodash _.tire (mutar matriz), _.pullAt (mutar matriz) o _.sin (no mutar matriz),
OK, por ejemplo, usted tiene la matriz a continuación:
Y queremos eliminar el número 4. Usted puede simplemente utilizar el siguiente código:
Si usted está utilizando esta función, se escribe una función reutilizable que se adjunta a la nativo función de matriz como la siguiente:
Pero ¿y si tiene la siguiente matriz en su lugar con un par de [5]s en la matriz?
Necesitamos un bucle para comprobar todos ellos, pero es más fácil y más eficiente es el uso integrado de las funciones de JavaScript, por lo que podemos escribir una función que utiliza un filtro como el de abajo, lugar:
También hay bibliotecas de terceros que ayudan a hacer esto, como Lodash o Subrayado. Para obtener más información, busque en lodash _.tire, _.pullAt o _.sin.
this.splice(num.indexOf(x), 1);
=>this.splice(this.indexOf(x), 1);
Aquí están algunas maneras de quitar un elemento de una matriz mediante JavaScript.
Todo el método descrito no mutan a la matriz original, y en lugar de crear uno nuevo.
Si usted sabe que el índice de un elemento
Supongamos que tenemos una matriz, y desea eliminar un elemento en la posición
i
.Un método es utilizar
slice()
:JS:
slice()
crea un nuevo array con los índices que recibe. Simplemente debemos crear una nueva matriz, desde el inicio hasta el índice que desea eliminar, y concatenar otra matriz de la posición siguiente al de la que hemos eliminado al final de la matriz.Si sabe el valor
En este caso, una buena opción es utilizar
filter()
, que ofrece una más declarativa enfoque:JS:
Para ello se utiliza el ES6 flecha funciones. Puede utilizar las funciones tradicionales para soportar los navegadores más antiguos:
JS:
o puede utilizar Babel y transpile la ES6 código del ES5 para hacerla más digerible para los navegadores antiguos, sin embargo, la escritura moderna de JavaScript en el código.
La eliminación de varios elementos
¿Y si en vez de un único elemento que desea eliminar muchos de los artículos?
Vamos a encontrar la solución más simple.
Por índice
Usted puede crear una función y eliminar elementos en serie:
JS:
Por valor
Usted puede buscar para su inclusión dentro de la función de devolución de llamada:
JS:
Evitar la mutación de la matriz original
splice()
(que no debe confundirse conslice()
) muta a la matriz original, y debe ser evitado.(publicado originalmente en https://flaviocopes.com/how-to-remove-item-from-array/)
Soy bastante nuevo en JavaScript y necesita esta funcionalidad. Simplemente me escribió esto:
Entonces cuando quiero usarlo:
De salida – Como se esperaba.
[«elemento1», «elemento1»]
Usted puede tener diferentes necesidades que yo, así que usted puede modificar fácilmente para adaptarse a ellos. Espero que esto ayude a alguien.
ES6 & sin mutación: (octubre de 2016)
A continuación :
Si tiene objetos complejos en la matriz puede utilizar filtros?
En situaciones donde $.inArray o matriz.empalme no es tan fácil de usar. Especialmente si los objetos son, quizás, poca en la matriz.
E. g. si tienes un objeto con un campo de Id y desea que el objeto se elimina de una matriz:
Actualización: se recomienda Este método sólo si no puede utilizar ECMAScript 2015 (anteriormente conocido como ES6). Si se puede usar, otras respuestas aquí es mucho más prolijo de las implementaciones.
Esta esencia aquí va a resolver su problema, y también elimina todas las ocurrencias de la discusión en lugar de sólo 1 (o un valor especificado).
Uso:
Quiero respuesta basada en la ECMAScript 6. Asumir, tiene una matriz como la siguiente:
Si desea eliminar en un índice especial como
2
, escribir el siguiente código:Pero si desea eliminar un elemento especial como
3
y no sabe de su índice, hacer como la siguiente:Sugerencia: por favor, utilice una flecha función de filtro de devolución de llamada, a menos que usted conseguirá un array vacío.
Nunca se debe mutar su matriz. Como esto está en contra de la programación funcional patrón. Puede crear una nueva matriz sin hacer referencia a la matriz que desea cambiar los datos de uso de la ECMAScript 6 método
filter
;Suponga que desea eliminar
5
de la matriz, puede simplemente hacer como este:Esto le dará una nueva matriz sin el valor que se desea eliminar. Así, el resultado será:
Para un mayor entendimiento se puede leer el MDN documentación en De la matriz.filtro.
Una más moderna, ECMAScript 2015 (anteriormente conocida como la Armonía o ES 6) enfoque. Dado:
A continuación:
Rendimiento:
Puede utilizar Babel y un relleno de servicio para asegurar que este está bien soportado en todos los navegadores.
.filter
devuelve una nueva matriz, que no es exactamente el mismo como quitar el elemento de la misma matriz. La ventaja de este enfoque es que se puede de la cadena de la matriz de métodos juntos. por ejemplo:[1,2,3].filter(n => n%2).map(n => n*n) === [ 1, 9 ]
splice
oslice
.items= items.filter(x=>x!=3)
. Además, el protocolo facultativo no establece ningún requisito para el conjunto de datos grande.La eliminación de un elemento en particular/string a partir de una matriz se puede hacer en una sola línea:
Todavía creo que este es el más elegante una línea que usted puede conseguir para este tipo de problema:
donde
theArray es la matriz que desea quitar algo particular, stringToRemoveFromArray es la cadena que desea eliminar y 1 es la cantidad de elementos que desea quitar.
"stringToRemoveFromArray"
no se encuentra en su matriz, esto va a eliminar el último elemento de la matriz.Que tienen de 1 a 9 en la matriz, y desea quitar 5. Usar el siguiente código:
JS:
Si quieres múltiples valores. Ejemplo:- 1,7,8
JS:
Si quieres eliminar un valor de matriz en una matriz. Ejemplo: [3,4,5]
JS:
Incluye navegador, es enlace.
Sé que hay un montón de respuestas ya, pero muchos de ellos se parecen más a complicar el problema. Aquí es un simple, recursiva manera de eliminar todas las instancias de una clave – llama a sí mismo hasta el índice no se encuentra. Sí, sólo funciona en los navegadores con
indexOf
, pero es muy simple y puede ser fácilmente polyfilled.Independiente de la función
Prototipo método
Basado en todas las respuestas que eran principalmente correcta y teniendo en cuenta las mejores prácticas sugeridas (especialmente el uso de la Matriz.prototipo directamente), me encontré con el siguiente código:
La revisión de la función anterior, a pesar del hecho de que funciona bien, me di cuenta de que podría haber algo de mejora en el rendimiento. También el uso de ES6 en lugar de ES5 es un enfoque mucho mejor. Con ese fin, este es el código mejorado:
Cómo utilizar:
Actualmente estoy escribiendo un blog en el que he comparado varias soluciones para la Matriz sin problema y en comparación con el tiempo que se tarda en ejecutar. Voy a actualizar esta respuesta con el enlace una vez que termine ese post. Sólo para hacerle saber, he comparado los de arriba contra lodash del sin y en caso de que el navegador soporta
Map
, es mejor que lodash! Aviso que no estoy utilizandoArray.prototype.indexOf
oArray.prototype.includes
como envolver el exlcudeValues en unMap
oObject
hace consultar más rápido!Usted puede hacer un bucle hacia atrás para asegurarse de no meter la pata hasta los índices, si hay varias instancias del elemento.
Demostración En Vivo
Tengo otra buena solución para la eliminación de una matriz:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Quitar por el Índice de
Una función que devuelve una copia de la matriz sin el elemento en el índice:
Quitar por Valor
Función que devuelve una copia de la matriz sin Valor.
return value != elem
?!Crear nueva matriz:
Agregar elementos a esta matriz:
La función indexOf (devuelve el índice o -1 cuando no se encuentra):
De verificación índice de este elemento (probado con Firefox y Internet Explorer 8 (y último):
Quitar 1 elemento situado en el índice de la matriz
También participé en la situación en la que tuve que quitar un elemento de
Array
..indexOf
no estaba trabajando enIE*
para compartir mi trabajojQuery.inArray()
solución.Creo que muchas de las instrucciones JavaScript no está bien pensado para la programación funcional. Empalme devuelve el borrado del elemento donde la mayoría del tiempo que necesita la reducción de la matriz. Esto es malo.
Imagínese que usted está haciendo una llamada recursiva, y tienen que pasar una matriz con un menor elemento, probablemente sin la actual indexada artículo. O imagínese que usted está haciendo otra llamada recursiva, y tiene que pasar un array con un elemento empujado.
En ninguno de estos casos se puede realizar
myRecursiveFunction(myArr.push(c))
omyRecursiveFunction(myArr.splice(i,1))
. El primer idiota en el hecho de pasar la longitud de la matriz y el segundo idiota va a pasar el borrado del elemento como un parámetro.Así que lo que hago en realidad… Para eliminar un elemento de la matriz y de paso de la resultante a una función como un parámetro en el mismo tiempo hago de la siguiente manera
Cuando se trata de empuje que es más tonto… me gusta,
Creo en un adecuado lenguaje funcional de un método de mutación del objeto es llamado debe devolver una referencia al objeto mismo como un resultado.
2017-05-08
La mayoría de las respuestas posibles de trabajo para la comparación estricta, lo que significa que tanto los objetos de referencia exactamente el mismo objeto en memoria (o son tipos primitivos), pero a menudo se desea eliminar un no-objeto primitivo de una matriz que tiene un cierto valor. Por ejemplo, si usted hace una llamada a un servidor y desea comprobar un objeto recuperado en contra de un objeto local.
Hay alternativa/implementaciones más rápidas para valuesAreEqual, pero esto no hace el trabajo. También puede usar un comparador de si usted tiene un campo específico de verificación (por ejemplo, algunos recuperados UUID frente a un local UUID).
También tenga en cuenta que esta es una operación funcional, lo que significa que no mutar la matriz original.
Muchas veces es mejor crear un nuevo array con los
filter
función.Esto también mejora la legibilidad en mi humilde opinión. Yo no soy un fan de
slice
, aunque sé que a veces hay que ir por ella.En CoffeeScript:
Uso de jQuery, InArray:
Nota: inArray devolverá -1 si no se encontró el elemento.
Se puede iterar sobre cada
array
-objeto ysplice
si existen en suarray
.Me gusta esta versión de empalme, la eliminación de un elemento por su valor de uso
$.inArray
:Retire el elemento en el índice i, sin la mutación de la matriz original:
JavaScript (ES5.1) – en lugar edición
Soporte de los navegadores: Internet Explorer 9 o posterior (detallada de la compatibilidad del navegador)
JavaScript (ES5.1) – inmutable edición
Soporte de los navegadores: lo Mismo que JavaScript en lugar de la edición
Vainilla ES6 – inmutable edición
Soporte de los navegadores: Chrome 46, Edge 12, Firefox 16, Opera 37, Safari 8 (detallada de la compatibilidad del navegador)
Por mi solución puede eliminar uno o más de un elemento en una matriz, gracias a JavaScript puro. No hay necesidad de otra biblioteca de JavaScript.
Hice una manera bastante eficiente de extensión a la base array de JavaScript:
removeAt
en ES estándar. Supongo, que esto es algo, es decir sólo cosas? Que deben ser mencionados en la respuesta.Acabo de crear un polyfill en el
Array.prototype
a través deObject.defineProperty
para eliminar un elemento deseado en una matriz sin dar lugar a errores cuando se itera sobre ella más tarde a travésfor .. in ..
La eliminación de un valor entero
Extracción de una cadena de valor
La eliminación de un valor booleano
También es posible eliminar un objeto en el interior de la matriz a través de este
Array.prototype.remove
método. Sólo necesitas especificar elkey => value
de laObject
desea quitar.La eliminación de un objeto de valor
Uso jQuery.grep():
JS:
HTML:
Mientras que la mayoría de las respuestas anteriores responder a la pregunta, no es lo suficientemente claro por qué el
slice()
método no ha sido utilizado. Sí,filter()
cumple con la inmutabilidad de los criterios, pero, ¿cómo hacer el siguiente corto equivalente?Y ahora vamos a decir que debemos eliminar el segundo elemento de la matriz, se puede hacer simplemente:
Esta forma de eliminar un elemento de una matriz se anima hoy en día en la comunidad debido a su simple e inmutable de la naturaleza. En general, los métodos que causa la mutación debe ser evitado. Por ejemplo, se recomienda reemplazar
push()
conconcat()
ysplice()
conslice()
.Hice una función:
Y utilizado como este:
pop
, al menos, que es hacer lo que el nombre de método implica!Eliminar un valor, mediante sueltas de comparación, sin la mutación de la matriz original, ES6
export const arrayRemove = (array, value) => [...array.filter(item => item !== value)];
Tal vez esto podría ser más sencillo.[...
—.filter
ya debería devolver una copia.[...
no es necesario en este caso de modo aún más sencillo 🙂 gracias por eso.Eliminar un elemento de última
Eliminar un elemento de primer
Eliminar del medio
Eliminar un elemento de la última
Eliminar mediante el uso de un número de índice de matriz
Eliminando el valor con el índice y el empalme!
Quitar la última ocurrencia de una o todas las veces, o la primera aparición?
o
Post de mi código que elimina un elemento de la matriz en su lugar, y reducir la longitud de matriz así.
Para todos los que buscan replicar un método que devuelve una nueva matriz que se ha duplicado números o cadenas de caracteres se retiran, este ha sido elaborado a partir de las respuestas:
El Uso De La Matriz.findindex, podemos reducir el número de líneas de código.
developer.mozilla.org
Su pregunta no indican si la orden o valores distintos son un requisito.
Si usted no se preocupan por fin, y no tendrá el mismo valor en el contenedor más de una vez, el uso de un Conjunto. Será más rápido y más breve.
Hay muchas fantásticas respuestas aquí, pero para mí, lo que funcionó la mayoría simplemente no estaba quitando el elemento de la matriz por completo, sino simplemente establecer el valor de a null.
Esto funciona para la mayoría de los casos que tengo y es una buena solución, ya que voy a estar usando la variable más tarde y no quieres que se ha ido, sólo vacío por ahora. Además, este enfoque es completamente compatible con distintos navegadores.
Una muy ingenuo aplicación sería el siguiente:
JS:
Puedo devolver la longitud de la matriz de la función a cumplir con los otros métodos, como la
Array.prototype.push()
.Esta solución tendrá una matriz de entrada y búsqueda a través de la entrada para el valor de quitar. Este bucle a través de toda la matriz de entrada y el resultado será una segunda matriz de enteros que ha tenido el índice específico eliminado. Los enteros de la matriz a continuación, se copia de nuevo en la matriz de entrada.
El siguiente método será eliminar todas las entradas de un determinado valor de una matriz sin necesidad de crear una nueva matriz y con sólo una iteración que se superfast. Y funciona en la antigua Internet Explorer 5.5 navegador:
JS:
HTML:
Lo que es una vergüenza tiene una matriz de enteros, no un objeto, donde las claves son cadenas equivalentes de estos enteros.
He mirado a través de una gran cantidad de estas respuestas, y todos ellos parecen uso de la «fuerza bruta», por lo que puedo ver. No he examinado cada uno de ellos, le pido disculpas si esto no es así. Para una pequeña matriz de esto está muy bien, pero lo que si tiene 000s de enteros en ella?
Me corrija si estoy equivocado, pero no podemos asumir que en un
key => value
mapa, del tipo de los que un objeto JS es, que la clave del mecanismo de recuperación puede ser asumida como altamente diseñado y optimizado? (NOTA: si algunos super-experto me dice que este no es el caso, me puede sugerir el uso de ES6 del Mapa de la clase lugar, que sin duda va a ser).Sólo estoy sugiriendo que, en ciertas circunstancias, la mejor solución podría ser la de convertir la matriz a un objeto… el problema es, por supuesto, que usted podría tener la repetición de valores enteros. Sugiero poner aquellos en los cubos como el «valor» de la parte de la
key => value
entradas. (NOTA: si está seguro de que usted no tiene repetición de elementos de la matriz de esto puede ser mucho más simple: los valores de «igual» de las teclas, y sólo tiene que irObject.values(...)
de volver a su matriz modificada).Así que usted podría hacer:
de salida:
esta forma, es fácil de eliminar todos los números de 55
Usted no tiene que eliminar a todos ellos: los valores del índice son empujados en sus cubos en orden de aparición, así que (por ejemplo):
borrará la primera y última aparición, respectivamente. Usted puede contar la frecuencia de ocurrencia fácilmente, vuelva a colocar todos de 55 años con 3s por transferir el contenido de un cubo a otro, etc.
… volver a sus modificado int matriz es ligeramente involucrados: pero cada cubo contiene el índice (en la matriz original) del valor representado por el (string key). Cada uno de estos cubo de valores es también único: de modo que se convierten en las claves de un nuevo objeto, con el (verdadero) entero de la «integer clave de la cadena» como valor… luego ordenar las llaves e ir
Object.values( ... )
.Esto suena muy involucrados y consume mucho tiempo… pero obviamente todo depende de las circunstancias y de uso deseada. Mi entendimiento es que todas las versiones y contextos de la JS, solo funcionan en un hilo, y el hilo no «dejar ir», por lo que podría ser un horrible congestión con una «fuerza bruta» método: causadas no tanto por la
indexOf
ops, pero repetidos múltiplesslice
/splice
ops.Anexo
Si estás seguro esto es demasiado ingeniería para el caso de uso, seguramente la más simple «fuerza bruta» es
(sí, otras respuestas han descubierto
Array.prototype.filter
…)Tuve este problema (en una situación en la que la sustitución de la matriz fue aceptable) y la resolvió con un simple:
Para dar el fragmento anterior un poco de contexto:
Esta solución debe trabajar con la información de referencia y el valor de los artículos. Todo depende de si usted necesita para mantener una referencia a la matriz original en cuanto a si esta solución es aplicable.
Para mí la más simple es la mejor, y como estamos en el 2018 (cerca de 2019), te doy este (cerca de) la línea para responder a la pregunta original:
La cosa útil es que se puede utilizar en un curry de expresión, tales como:
Para eliminar un determinado elemento o los elementos posteriores, De la matriz.splice() método funciona bien.
El método splice() cambia el contenido de una matriz mediante la eliminación o sustitución de los elementos existentes y/o la adición de nuevos elementos, y devuelve el elemento eliminado(s).
Sintaxis: matriz.splice(índice, deleteCount, artículo 1, ….., itemX)
Aquí
index
es obligatorio y el resto de los argumentos son opcionales.Por ejemplo:
Nota: De la matriz.splice() método puede ser usado si se conoce el índice del elemento que desea eliminar. Pero podemos tener un poco más de los casos que se mencionan a continuación:
En caso de que desea eliminar sólo el último elemento, puede utilizar De la matriz.pop()
En caso de que desea eliminar sólo el primer elemento, puede utilizar De la matriz.shift()
Si sabe el elemento por sí solo, pero no la posición (o índice) del elemento, y desea eliminar todos los elementos coincidentes mediante De la matriz.filter() método:
O mediante el método splice() como:
O supongamos que queremos eliminar
del
de la matrizarr
:O
Si sabe el elemento por sí solo, pero no la posición (índice) del elemento, y desea eliminar sólo en muy primer elemento coincidente utilizando el método splice ():
De empalme, filtrar y eliminar para eliminar un elemento de una matriz
Cada matriz tiene su índice, y ayuda a eliminar un elemento en particular con su índice.
El método splice ()
matriz.splice(índice, 1);
El primer parámetro es el índice y el segundo es el número de elementos que desea eliminar de ese índice.
Modo para un solo elemento, se uso 1.
El método delete
eliminar de la matriz[índice]
El método filter ()
Si desea eliminar un elemento que se repite en una matriz, a continuación, el filtro de la matriz:
Donde
elem
es el elemento que desea eliminar de la matriz yarray
es el nombre de la matriz.Si usted debe apoyar a las versiones anteriores de Internet Explorer, recomiendo usar la siguiente relleno (nota: este es no un marco). Es 100% compatible con la sustitución de todos los modernos de la matriz de métodos (JavaScript 1.8.5 /ECMAScript 5 Matriz de Extras) que funciona para Internet Explorer 6+, Firefox 1.5+, Chrome, Safari, & Ópera.
https://github.com/plusdude/array-generics
Definir un método llamado remove() en un array de objetos mediante la generación de prototipos de función de JavaScript.
Por favor, eche un vistazo a el siguiente código.
La mayoría de las respuestas que aquí se dan una solución con –
for loop
A pesar de todas las soluciones que se debe trabajar con estos métodos, pensé que podía el uso de la manipulación de cadenas.
Puntos a tener en cuenta acerca de esta solución –
El truco es –
stringify
conjunto de datos de entrada y el valor de búsquedasplit
datos sobre delimitador,
.Un JS de violín con las pruebas para los objetos y los números se crea aquí – https://jsfiddle.net/4t7zhkce/33/
Comprobar la
remove
método en el violín.Para encontrar y eliminar una cadena particular de una matriz de cadenas:
Fuente: https://www.codegrepper.com/?search_term=remove+un+particular+elemento+de+la matriz de
Ya hay un montón de respuestas, pero porque nadie lo ha hecho con un forro sin embargo, pensé que había que mostrar mi método. Se aprovecha el hecho de que la cadena.split() de la función de eliminar todos los caracteres especificados al crear una matriz. Aquí está un ejemplo:
JS:
En este ejemplo, todos los de la 4 están siendo retirados de la matriz de ary. Sin embargo, es importante tener en cuenta que cualquier matriz que contiene el carácter «-» va a causar problemas con este ejemplo. En definitiva, hará que el join(«-«) de la función a la pieza de su cadena junto incorrectamente. En tal situación, todos los «-» de las cadenas en el anterior snipet se puede reemplazar con cualquier cadena que no serán utilizados en la matriz original. Aquí está otro ejemplo:
JS:
'\uD842'
) en su lugar. Para hacer más claro y más corto para otros, solo quisiera agregar un par de cadenas más a los elementos de la matriz (incluyendo'4'
) y el primer fragmento/ejemplo (personas pueden tener votada abajo porque ni siquiera leer la 2ª parte).De salida [2, 3, 4, 5];
No en lugar de la solución de
JS:
Quitar único elemento
Eliminar varios elementos, en lugar
Esto es más complicado para garantizar que el algoritmo se ejecuta en O(N) tiempo.
Eliminar varios elementos, la creación de nuevos objetos
La splice() método cambia el contenido de una matriz mediante la eliminación o sustitución de los elementos existentes y/o la adición de nuevos elementos.
matriz.splice(start[, deleteCount[, elemento1[, item2[, …]]]])
inicio
El índice en el que se inicia el cambio de la matriz (con origen en 0). Si es mayor que la longitud de la matriz, el inicio real del índice será ajustado a la longitud de la matriz. Si es negativo, se empezará a que muchos de los elementos de la final de la matriz (con su origen, -1) y se establece en 0 si el valor absoluto es mayor que la longitud de la matriz.
deleteCount Opcional
Un entero que indica el número de antiguos elementos de la matriz a quitar.
Si deleteCount se omite, o si su valor es mayor que la de la matriz.la longitud de inicio (es decir, si es mayor que el número de elementos a la izquierda de la matriz, a partir de inicio), todos los elementos, desde el inicio hasta el final de la matriz, será eliminado.
Si deleteCount es 0 o negativo, sin elementos son eliminados. En este caso, debe especificar al menos un nuevo elemento (ver más abajo).
item1, item2, … Opcional
Los elementos a añadir a la matriz, desde el comienzo de índice. Si no se especifica alguno de los elementos, splice() sólo eliminar elementos de la matriz.
Para más referencias, por favor vaya a través de:
De la matriz.el prototipo.splice()
Puede ampliar el objeto de matriz para definir una costumbre borrar la función de la siguiente manera:
JS:
Tomar ventaja de reducir método de la siguiente manera:
El caso a) si usted necesita para eliminar un elemento del índice:
caso b) si usted necesita para eliminar un elemento por el valor del elemento (int):
Así que de esta manera podremos regresar a una nueva matriz (será en un lugar fresco y funcional – mucho mejor que el uso de push o empalme) con el elemento eliminado.
puede crear un índice con todos los accesors ejemplo
JS:
HTML:
Me gustaría sugerir para quitar un elemento de matriz utilizando eliminar y filtrar:
Por lo tanto, podemos eliminar sólo uno específico de elemento de matriz en lugar de todos los elementos con el mismo valor.
Puede crear un prototipo para que. Acaba de pasar el elemento de la matriz y el valor que desea quitar el elemento de la matriz
JS:
start
yend
puede ser negativo. En ese caso, ellos, a contar desde el final de la matriz.Si sólo
start
se especifica, sólo un elemento es eliminado.La función devuelve la nueva longitud de matriz.
(8) [0, 1, 7, 8, 9]
(7) [0, 1, 2, 3, 4, 5, 9]
(4) [0, 1, 2, 9]
JS:
Este ejemplo funciona si desea eliminar un elemento actual.