una tablas tabla obtener especifico eliminar elemento ejemplos datos create con array agregar javascript arrays

tablas - obtener datos de una tabla html javascript



¿Cómo eliminar el elemento de la matriz por valor? (30)

¿Existe un método para eliminar un elemento de una matriz de JavaScript?

Dada una matriz:

var ary = [''three'', ''seven'', ''eleven''];

Me gustaría hacer algo como:

removeItem(''seven'', ary);

He buscado en splice() pero eso solo se elimina por el número de posición, mientras que necesito algo para eliminar un elemento por su valor.


// Editado gracias a MarcoCI por el consejo.

prueba esto:

function wantDelete(item, arr){ for (var i=0;i<arr.length;i++){ if (arr[i]==item){ arr.splice(i,1); //this delete from the "i" index in the array to the "1" length break; } } } var goodGuys=wantDelete(''bush'', [''obama'', ''bush'', ''clinton'']); //[''obama'', ''clinton'']

espero que esto te ayude


Aquí hay una versión que usa la función inArray de jQuery:

var index = $.inArray(item, array); if (index != -1) { array.splice(index, 1); }


ES6 camino.

let commentsWithoutDeletedArray = commentsArray.filter( (comment) => !(comment.Id === commentId));


Echa un vistazo de esta manera:

for(var i in array){ if(array[i]==''seven''){ array.splice(i,1); break; } }

y en una función:

function removeItem(array, item){ for(var i in array){ if(array[i]==item){ array.splice(i,1); break; } } } removeItem(array, ''seven'');


El truco consiste en recorrer la matriz desde el principio hasta el principio, para no desordenar los índices al eliminar elementos.

var deleteMe = function( arr, me ){ var i = arr.length; while( i-- ) if(arr[i] === me ) arr.splice(i,1); } var arr = ["orange","red","black", "orange", "white" , "orange" ]; deleteMe( arr , "orange");

arr es ahora ["rojo", "negro", "blanco"]


Eliminación no destructiva:

function removeArrayValue(array, value) { var thisArray = array.slice(0); // copy the array so method is non-destructive var idx = thisArray.indexOf(value); // initialise idx while(idx != -1) { thisArray.splice(idx, 1); // chop out element at idx idx = thisArray.indexOf(value); // look for next ocurrence of ''value'' } return thisArray; }


Eliminar todos los elementos coincidentes de la matriz (en lugar de solo el primero, ya que parece ser la respuesta más común aquí):

while ($.inArray(item, array) > -1) { array.splice( $.inArray(item, array), 1 ); }

Utilicé jQuery para el trabajo pesado, pero tienes la idea de querer ser nativo.


Esta puede ser una función global o un método de un objeto personalizado, si no se le permite agregar a los prototipos nativos. Elimina todos los elementos de la matriz que coinciden con cualquiera de los argumentos.

Array.prototype.remove = function() { var what, a = arguments, L = a.length, ax; while (L && this.length) { what = a[--L]; while ((ax = this.indexOf(what)) !== -1) { this.splice(ax, 1); } } return this; }; var ary = [''three'', ''seven'', ''eleven'']; ary.remove(''seven''); /* returned value: (Array) three,eleven */

Para convertirlo en un

function removeA(arr) { var what, a = arguments, L = a.length, ax; while (L > 1 && arr.length) { what = a[--L]; while ((ax= arr.indexOf(what)) !== -1) { arr.splice(ax, 1); } } return arr; } var ary = [''three'', ''seven'', ''eleven'']; removeA(ary, ''seven''); /* returned value: (Array) three,eleven */

Y para cuidar de IE8 y más abajo.

if(!Array.prototype.indexOf) { Array.prototype.indexOf = function(what, i) { i = i || 0; var L = this.length; while (i < L) { if(this[i] === what) return i; ++i; } return -1; }; }


Intenté usar el método de función de jbaron anterior, pero encontré que necesitaba mantener la matriz original intacta para usarla más tarde, y crear una nueva matriz como esta:

var newArray = referenceArray;

aparentemente crea por referencia en lugar de por valor porque cuando quité un elemento de newArray, también se lo quitó a referenceArray. Así que decidí crear una nueva matriz cada vez como esta:

function newArrRemoveItem(array, item, newArray){ for(var i = 0; i < array.length; i++) { if(array[i]!=item){ newArray.push(array[i]); } } }

Luego lo uso así en otra función:

var vesselID = record.get(''VesselID''); var otherVessels = new Array(); newArrRemoveItem(vesselArr,vesselID,otherVessels);

Ahora el vesselArr permanece intacto, mientras que cada vez que ejecuto el código anterior, la matriz otherVessels incluye todos, excepto el último elemento vesselID.


Lo que buscas es filtro

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Esto te permitirá hacer lo siguiente:

var ary = [''three'', ''seven'', ''eleven'']; var aryWithoutSeven = ary.filter(function(value) { return value != ''seven'' }); console.log(aryWithoutSeven); // returns [''three'', ''eleven'']

Esto también se observó en este hilo en otra parte: https://.com/a/20827100/293492


Otra variación:

if (!Array.prototype.removeArr) { Array.prototype.removeArr = function(arr) { if(!Array.isArray(arr)) arr=[arr];//let''s be nice to people who put a non-array value here.. that could be me! var that = this; if(arr.length){ var i=0; while(i<that.length){ if(arr.indexOf(that[i])>-1){ that.splice(i,1); }else i++; } } return that; } }

Es indexOf () dentro de un bucle de nuevo, pero suponiendo que la matriz a eliminar es pequeña en relación con la matriz a limpiar; cada eliminación acorta el bucle while.


Por favor, no use la variante con la delete : hace un agujero en la matriz, ya que no vuelve a indexar los elementos después del elemento eliminado.

> Array.prototype.remove=function(v){ ... delete this[this.indexOf(v)] ... }; [Function] > var myarray=["3","24","55","2"]; undefined > myarray.remove("55"); undefined > myarray [ ''3'', ''24'', , ''2'' ]


Puedes hacerlo de estas dos maneras:

var arr = ["1","2","3","4"] // we wanna delete number "3"

primero:

arr.indexOf(''3'') !== -1 && arr.splice(arr.indexOf(''3''), 1)

segundo (ES6):

arr = arr.filter(e => e !== ''3'')


Puedes lograr esto usando la función Lodash _.remove .

var array = [''three'', ''seven'', ''eleven'']; var evens = _.remove(array, function(e) { return e !== ''seven''; }); console.log(evens);

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>


Puedes usar underscore.js . Realmente hace las cosas simples.

Por ejemplo, con esto:

var result = _.without([''three'',''seven'',''eleven''], ''seven'');

Y el result será [''three'',''eleven''] .

En tu caso el código que deberás escribir es:

ary = _.without(ary, ''seven'')

Reduce el código que escribes.


Puedes usar without o pull de Lodash :

const _ = require(''lodash''); _.without([1, 2, 3, 2], 2); // -> [1, 3]


Puedes usar el método indexOf como este:

var index = array.indexOf(item); if (index !== -1) array.splice(index, 1);

Nota : tendrás que cambiarlo para IE8 e inferior

var array = [1,2,3,4] var item = 3 var index = array.indexOf(item); if (index !== -1) array.splice(index, 1); console.log(array)


Realmente, no puedo ver por qué esto no se puede resolver con

arr = arr.filter(value => value !== ''seven'');

O tal vez quieras usar vainilla JS

arr = arr.filter(function(value) { return value !== ''seven'' });


Si tiene valores únicos en su matriz y no importa el ordenamiento, puede usar Establecer y eliminar :

var mySet = new Set([''foo'']); mySet.delete(''foo''); // Returns true. Successfully removed. mySet.has(''foo''); // Returns false. The "foo" element is no longer present.


Un one-liner lo hará,

var ary = [''three'', ''seven'', ''eleven'']; // Remove item ''seven'' from array var filteredAry = ary.filter(function(e) { return e !== ''seven'' }) //=> ["three", "eleven"] // In ECMA6 (arrow function syntax): var filteredAry = ary.filter(e => e !== ''seven'')

Esto hace uso de la función de filter en JS. Es compatible con IE9 y superior.

Lo que hace (desde el enlace doc)

filter () llama a una función de devolución de llamada proporcionada una vez para cada elemento de una matriz, y construye una nueva matriz de todos los valores para los que la devolución de llamada devuelve un valor que obliga a ser verdadero. la devolución de llamada se invoca solo para los índices de la matriz que tienen valores asignados; no se invoca para los índices que se han eliminado o que nunca se han asignado valores. Los elementos de la matriz que no pasan la prueba de devolución de llamada simplemente se omiten y no se incluyen en la nueva matriz.

Básicamente, esto es lo mismo que todos los demás for (var key in ary) { ... } solutions, excepto que el for in constructo es compatible a partir de IE6.

Básicamente, el filtro es un método de conveniencia que se ve mucho mejor (y es posible) en lugar de for in construct (AFAIK).


Una solución muy limpia que funciona en todos los navegadores y sin ningún marco es asignar una nueva matriz y simplemente devolverla sin el elemento que desea eliminar:

/** * @param {Array} array the original array with all items * @param {any} item the time you want to remove * @returns {Array} a new Array without the item */ var removeItemFromArray = function(array, item){ /* assign a empty array */ var tmp = []; /* loop over all array items */ for(var index in array){ if(array[index] !== item){ /* push to temporary array if not like item */ tmp.push(array[index]); } } /* return the temporary array */ return tmp; }


Usé la opción más votada y creé una función que limpiaría una matriz de palabras utilizando otra matriz de palabras no deseadas:

function cleanArrayOfSpecificTerms(array,unwantedTermsArray) { $.each(unwantedTermsArray, function( index, value ) { var index = array.indexOf(value); if (index > -1) { array.splice(index, 1); } }); return array; }

Para usar, haga lo siguiente:

var notInclude = [''Not'',''No'',''First'',''Last'',''Prior'',''Next'', ''dogs'',''cats'']; var splitTerms = ["call", "log", "dogs", "cats", "topic", "change", "pricing"]; cleanArrayOfSpecificTerms(splitTerms,notInclude)


Variante de CoffeeScript + jQuery:

arrayRemoveItemByValue = (arr,value) -> r=$.inArray(value, arr) unless r==-1 arr.splice(r,1) # return arr console.log arrayRemoveItemByValue([''2'',''1'',''3''],''3'')

se elimina sólo uno, no todos.


Viendo que no hay uno bonito, aquí hay una función ES6 simple y reutilizable.

const removeArrayItem = (arr, itemToRemove) => { return arr.filter(item => item !== itemToRemove) }

Uso:

const items = [''orange'', ''purple'', ''orange'', ''brown'', ''red'', ''orange''] removeArrayItem(items, ''orange'')


indexOf es una opción, pero su implementación consiste básicamente en buscar el valor del arreglo completo, por lo que el tiempo de ejecución aumenta con el tamaño del arreglo. (así es en todos los navegadores, supongo, solo he comprobado Firefox).

No tengo un IE6 alrededor para verificarlo, pero lo llamaría una apuesta segura de que puedes verificar al menos un millón de elementos de matriz por segundo de esta manera en casi cualquier equipo cliente. Si [tamaño de matriz] * [búsquedas por segundo] puede crecer más de un millón, debería considerar una implementación diferente.

Básicamente, puedes usar un objeto para hacer un índice para tu matriz, así:

var index={''three'':0, ''seven'':1, ''eleven'':2};

Cualquier entorno de JavaScript sano creará un índice de búsqueda para dichos objetos, de modo que pueda traducir rápidamente una clave en un valor, sin importar cuántas propiedades tenga el objeto.

Este es solo el método básico. Dependiendo de su necesidad, puede combinar varios objetos y / o arreglos para hacer que los mismos datos se puedan buscar rápidamente para diferentes propiedades. Si especifica sus necesidades exactas, puedo sugerir una estructura de datos más específica.


//This function allows remove even array from array var removeFromArr = function(arr, elem) { var i, len = arr.length, new_arr = [], sort_fn = function (a, b) { return a - b; }; for (i = 0; i < len; i += 1) { if (typeof elem === ''object'' && typeof arr[i] === ''object'') { if (arr[i].toString() === elem.toString()) { continue; } else { if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) { continue; } } } if (arr[i] !== elem) { new_arr.push(arr[i]); } } return new_arr; }

Ejemplo de uso

var arr = [1, ''2'', [1 , 1] , ''abc'', 1, ''1'', 1]; removeFromArr(arr, 1); //["2", [1, 1], "abc", "1"] var arr = [[1, 2] , 2, ''a'', [2, 1], [1, 1, 2]]; removeFromArr(arr, [1,2]); //[2, "a", [1, 1, 2]]


function removeFrmArr(array, element) { return array.filter(e => e !== element); }; var exampleArray = [1,2,3,4,5]; removeFrmArr(a, 3); // return value like this //[1, 2, 4, 5]


let arr = [5, 15, 25, 30, 35]; console.log(arr); //result [5, 15, 25, 30, 35] let index = arr.indexOf(30); if (index > -1) { arr.splice(index, 1); } console.log(arr); //result [5, 15, 25, 35]


var index = array.indexOf(''item''); if(index!=-1){ array.splice(index, 1); }


var remove = function(array, value) { var index = null; while ((index = array.indexOf(value)) !== -1) array.splice(index, 1); return array; };