por - Cómo eliminar un valor específico de la matriz usando jQuery
jquery get class value (17)
Primero verifica si el elemento existe en la matriz.
$.inArray(id, releaseArray) > -1
la línea anterior devuelve el índice de ese elemento si existe en la matriz; de lo contrario, devuelve -1
releaseArray.splice($.inArray(id, releaseArray), 1);
ahora arriba de la línea eliminará este elemento de la matriz si se encuentra. Para resumir la lógica a continuación está el código requerido para verificar y eliminar el elemento de la matriz.
if ($.inArray(id, releaseArray) > -1) {
releaseArray.splice($.inArray(id, releaseArray), 1);
}
else {
releaseArray.push(id);
}
Tengo una matriz que se ve así: var y = [1, 2, 3];
Me gustaría eliminar 2
de la matriz y
.
¿Cómo puedo eliminar un valor particular de una matriz usando jQuery? He probado pop()
pero eso siempre elimina el último elemento.
Con jQuery, puedes hacer una operación de una sola línea como esta:
Ejemplo: http://jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
Utiliza el .splice()
nativo y $.inArray()
jQuery.
Eliminar artículo en la matriz
var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
Extendería la clase Array con una función pick_and_remove()
, así:
var ArrayInstanceExtensions = {
pick_and_remove: function(index){
var picked_element = this[index];
this.splice(index,1);
return picked_element;
}
};
$.extend(Array.prototype, ArrayInstanceExtensions);
Si bien puede parecer un poco detallado, ahora puede llamar a pick_and_remove()
en cualquier arreglo que desee.
Uso:
array = [4,5,6] //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array; //=> [4,6]
Puedes ver todo esto en la acción temática de pokemon here.
Hay una solución simple con empalme. De acuerdo con .splice() sintaxis de empalme está siguiendo;
array.splice(index, howmany, item1, ....., itemX)
índice requerido. Un entero que especifica en qué posición agregar / eliminar elementos, usar valores negativos para especificar la posición desde el final de la matriz
Howmany Required. El número de elementos a eliminar. Si se establece en 0, no se eliminarán los elementos
item1, ..., itemX Opcional. Los nuevos elementos que se agregarán a la matriz
Tenlo en cuenta, los siguientes js sacarán uno o más elementos coincidentes de la matriz dada si se encuentran, de lo contrario no eliminaría el último elemento de la matriz.
var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
return elem == item;
}).length;
O
var itemsFound = $.grep(x, function (elem) {
return elem == item;
}).length;
Así que la final debería parecerse a la siguiente.
x.splice( startItemIndex , itemsFound );
Espero que esto ayude.
Mi versión de la respuesta del usuario 113716. Su elimina un valor si no se encuentra ninguna coincidencia, lo que no es bueno.
var y = [1, 2, 3]
var removeItem = 2;
var i = $.inArray(removeItem,y)
if (i >= 0){
y.splice(i, 1);
}
alert(y);
Esto ahora elimina 1 elemento si se encuentra una coincidencia, 0 si no se encuentra ninguna coincidencia.
Cómo funciona:
- $ .inArray (valor, matriz) es una función jQuery que encuentra el primer índice de un
value
en unaarray
- Lo anterior devuelve -1 si no se encuentra el valor, así que verifique que i sea un índice válido antes de que realicemos la eliminación. Eliminar el índice -1 significa eliminar el último, lo que no es útil aquí.
- .splice (índice, cuenta) elimina el número de valores de cuenta que comienzan en el
index
, por lo que solo queremos unacount
de1
No es una forma jQuery pero ... ¿Por qué no usar una forma más simple? Elimine ''c'' de la siguiente matriz
var a = [''a'',''b'',''c'',''d'']
a.splice(a.indexOf(''c''),1);
>["c"]
a
["a", "b", "d"]
También puede usar: (Nota para mí: no modifique los objetos que no posee )
Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = [''a'',''b'',''c''];
a.remove(''c''); //value of "a" is now [''a'',''b'']
Añadir es más simple a.push(''c'')
No hay forma nativa de hacer esto en Javascript. Podría usar una biblioteca o escribir una pequeña función para hacer esto en su lugar: http://ejohn.org/blog/javascript-array-remove/
Para eliminar de forma segura 2 de la matriz con JavaScript de vainilla:
// Define polyfill for browsers that don''t natively support Array.indexOf()
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement, fromIndex) {
var k;
if (this===null) {
throw new TypeError(''"this" is null or not defined'');
}
var O = Object(this),
len = O.length >>> 0;
if (len===0) return -1;
var n = +fromIndex || 0;
if (Math.abs(n)===Infinity) n = 0;
if (n >= len) return -1;
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
while (k < len) {
if (k in O && O[k]===searchElement) return k;
++k;
}
return -1;
};
}
// Remove first instance of 2 from array
if (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
/* To remove all instances of 2 from array, change ''if'' to ''while'':
while (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
*/
console.log(y); // Returns [1, 3]
Fuente de Polyfill: Mozilla
Puedes usar underscore.js . Realmente hace las cosas simples.
En tu caso, el código que deberás corregir es:
_.without([1,2,3], 2);
y el resultado será [1,3].
Reduce el código que escribes.
Puedes usar. No funciona así:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
Tuve una tarea similar en la que necesitaba eliminar varios objetos a la vez en función de una propiedad de los objetos de la matriz.
Así que después de algunas iteraciones termino con:
list = $.grep(list, function (o) { return !o.IsDeleted });
Un JSFIDDLE trabajo
Puedes hacer algo como esto:
var y = [1, 2, 2, 3, 2]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
Resultado:
[1, 3]
http://snipplr.com/view/14381/remove-item-from-array-with-jquery/
jQuery.filter
método jQuery.filter
es útil. Esto está disponible para objetos Array
.
var arr = [1, 2, 3, 4, 5, 5];
var result = arr.filter(function(elem){
return elem != 5;
});//result -> [1,2,3,4]
http://jsfiddle.net/emrefatih47/ar0dhvhw/
En Ecmascript 6:
let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
var difference = [];
for( var i = 0; i < array1.length; i++ ) {
if( $.inArray( array1[i], array2 ) == -1 ) {
difference.push(array1[i]);
}
}
return difference;
}
A continuación, puede llamar a la función en cualquier lugar en su código.
var I_like = ["love", "sex", "food"];
var she_likes = ["love", "food"];
alert( "what I like and she does''t like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"!
Esto funciona en todos los casos y evita los problemas en los métodos anteriores. ¡Espero que ayude!
//This prototype function allows you to remove even array from array
Array.prototype.remove = function(x) {
var i;
for(i in this){
if(this[i].toString() == x.toString()){
this.splice(i,1)
}
}
}
Ejemplo de uso
var arr = [1,2,[1,1], ''abc''];
arr.remove([1,1]);
console.log(arr) //[1, 2, ''abc'']
var arr = [1,2,[1,1], ''abc''];
arr.remove(1);
console.log(arr) //[2, [1,1], ''abc'']
var arr = [1,2,[1,1], ''abc''];
arr.remove(''abc'');
console.log(arr) //[1, 2, [1,1]]
Para usar esta función de prototipo necesitas pegarla en tu código. Luego puedes aplicarlo a cualquier matriz con ''notación de puntos'':
someArr.remove(''elem1'')
//in case somebody needs something like this: multidimensional array (two items)
var ar = [[0,''a''],[1,''b''],[2,''c''],[3,''d''],[4,''e''],[5,''f'']];
var removeItem = 3;
ar = jQuery.grep(ar, function(n) {
return n[0] != removeItem; //or n[1] for second item in two item array
});
ar;