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? Lo he intentado pop()
pero eso siempre elimina el último elemento.
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? Lo he intentado pop()
pero eso siempre elimina el último elemento.
Respuestas:
Un JSFIDDLE que funciona
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/
Con jQuery, puede hacer una operación de una sola línea como esta:
Ejemplo: http://jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
Usa el nativo .splice()
y jQuery's $.inArray()
.
while
bucle y una variable temporal como esta:var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
.indexOf()
lugar de jQuery porque puede usar el último índice encontrado como punto de partida para la próxima búsqueda, que es mucho más eficiente que buscar en toda la matriz cada vez. var found=0; while ((found = y.indexOf(removeItem, found)) !== -1) y.splice(found, 1);
jQuery.filter
El método es útil. Esto está disponible para Array
objetos.
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);
Puedes usar underscore.js . Realmente hace las cosas simples.
En su caso, todo el código que tendrá que escribir es:
_.without([1,2,3], 2);
y el resultado será [1,3].
Reduce el código que escribes.
No es una forma jQuery pero ... ¿Por qué no usar una forma más simple? Eliminar '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 objetos que no le pertenecen )
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']
Agregar es más simplea.push('c')
//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 utilizar esta función prototipo, debe pegarla en su código. Luego puede aplicarlo a cualquier matriz con 'notación de puntos':
someArr.remove('elem1')
i
se sobrescribe.
No hay una forma nativa de hacer esto en Javascript. En su lugar, puede usar una biblioteca o escribir una pequeña función para hacer esto: http://ejohn.org/blog/javascript-array-remove/
Puede usar .not funciona así:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
searchValue
a 4, ejecuté el código, no se detectó ningún problema. Todos los valores todavía estaban presentes. @ JulianK
Mi versión de la respuesta del usuario113716. 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 encuentran coincidencias.
Cómo funciona:
value
en unarray
count
número de valores a partir de index
, por lo que sólo queremos una count
de las1
//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;
Hay una solución simple con empalme. De acuerdo con W3School, la sintaxis de empalme es la siguiente;
array.splice(index, howmany, item1, ....., itemX)
índice requerido. Un número entero que especifica en qué posición agregar / eliminar elementos. Utilice valores negativos para especificar la posición desde el final de la matriz.
cuántos requerido. El número de elementos que se eliminarán. Si se establece en 0, no se eliminarán elementos.
item1, ..., itemX Opcional. Los nuevos elementos que se agregarán a la matriz
Tenga en cuenta que los siguientes js mostrarán uno o más elementos coincidentes de la matriz dada si se encuentran, de lo contrario no eliminarían 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;
Entonces la final debería verse como la siguiente
x.splice( startItemIndex , itemsFound );
Espero que esto ayude.
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 es 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);
}
Tuve una tarea similar en la que necesitaba eliminar varios objetos a la vez en función de una propiedad de los objetos en la matriz.
Entonces, después de algunas iteraciones, termino con:
list = $.grep(list, function (o) { return !o.IsDeleted });
Extendería la clase Array con una pick_and_remove()
función, 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 recurrir pick_and_remove()
a cualquier matriz que desee!
Uso:
array = [4,5,6] //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array; //=> [4,6]
Puedes ver todo esto en acción con temática de pokemon aquí.
/** 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;
}
Luego puede llamar a la función en cualquier parte de 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!
Prueba esto, me funciona
_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
`enter code here`},
La segunda respuesta más votada aquí está en la pista más cercana posible a un método jQuery de una línea del comportamiento deseado que el OP quiere, pero tropezaron al final de su código, y tiene una falla. Si su elemento a eliminar no está realmente en la matriz, se eliminará el último elemento.
Algunos han notado este problema, y algunos han ofrecido formas de recorrer para protegerse de esto. Ofrezco el método más corto y limpio que pude encontrar, y he comentado en su respuesta la forma de corregir su código de acuerdo con este método.
var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";
// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used
// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array
// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);
La matriz x eliminará el elemento "adiós" fácilmente, y la matriz y quedará intacta.
El uso del argumento $.inArray(removeItem,array)
como segundo argumento en realidad termina siendo la longitud para empalmar. Dado que no se encontró el elemento, esto se evalúa como array.splice(-1,-1);
, lo que simplemente dará como resultado que no se empalme nada ... todo sin tener que escribir un bucle para esto.
Para eliminar de forma segura 2 de la matriz usando JavaScript 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
Solo para agregar a la respuesta de Sarfraz, sorprendido de que nadie lo haya convertido en una función todavía.
Use la respuesta de ddagsan usando el método .filter si tiene el mismo valor más de una vez en su matriz.
function arrayRemoveVal(array, removeValue){
var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
return newArray;
}
var promoItems = [1,2,3,4];
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>