Ver Mensaje Individual
  #13 (permalink)  
Antiguo 14/01/2014, 07:07
Avatar de IsaBelM
IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: remover un item especifico de array

he ratificado y refutado las afirmaciones de unos y de otros dentro del contexto de este post. comparemos delete y splice()

Cita:
var myarray = [
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "108", id_comentario: "120"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "200", id_comentario: "50"},
{clave_estado: "200", clave_municipio: "210", id_articulo: "121", id_comentario: "8"}
];

console.time('a');

Array.prototype.fnc = function(prop1, prop2, prop3, prop4) {
this.forEach(function(valor, indice, arr) {
if (valor[prop1] == 100 && valor[prop2] == 110 && valor[prop3] == 1078 && valor[prop4] == 10) {
delete arr[indice];
console.log(indice);
}

});
}

myarray.fnc('clave_estado', 'clave_municipio', 'id_articulo', 'id_comentario');

console.log(myarray);
console.log(myarray.length);
console.timeEnd('a');



var myarray2 = [
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "108", id_comentario: "120"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "200", id_comentario: "50"},
{clave_estado: "200", clave_municipio: "210", id_articulo: "121", id_comentario: "8"}
];

console.time('b');

Array.prototype.fnc2 = function(prop1, prop2, prop3, prop4) {
this.forEach(function(valor, indice, arr) {
if (valor[prop1] == 100 && valor[prop2] == 110 && valor[prop3] == 1078 && valor[prop4] == 10) {
arr.splice(indice, 1);
}

});
}

myarray2.fnc2('clave_estado', 'clave_municipio', 'id_articulo', 'id_comentario');

console.log(myarray2);
console.log(myarray2.length);
console.timeEnd('b');
como podemos observar en ambos casos se eliminan los elementos, pero a diferencia de splice(), con delete se mantiene el largo original. esto es debido a que el elemento es establecido como undefined. en cuestión de tiempos de ejecución no hay diferencias entre uno u otro

ahora pongamos que tenemos elementos repetidos y consecutivos. aquí cambiaría totalmente la cosa. delete, eliminaría ambos, mientras que splice() eliminaría sólo el primer elemento

Cita:
var myarray = [
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "108", id_comentario: "120"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "200", id_comentario: "50"},
{clave_estado: "200", clave_municipio: "210", id_articulo: "121", id_comentario: "8"}
];

console.time('a');

Array.prototype.fnc = function(prop1, prop2, prop3, prop4) {
this.forEach(function(valor, indice, arr) {
if (valor[prop1] == 100 && valor[prop2] == 110 && valor[prop3] == 1078 && valor[prop4] == 10) {
delete arr[indice];
console.log(indice);
}

});
}

myarray.fnc('clave_estado', 'clave_municipio', 'id_articulo', 'id_comentario');

console.log(myarray);
console.log(myarray.length);
console.timeEnd('a');



var myarray2 = [
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "110", id_articulo: "1078", id_comentario: "10"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "108", id_comentario: "120"},
{clave_estado: "100", clave_municipio: "120", id_articulo: "200", id_comentario: "50"},
{clave_estado: "200", clave_municipio: "210", id_articulo: "121", id_comentario: "8"}
];

console.time('b');

Array.prototype.fnc2 = function(prop1, prop2, prop3, prop4) {
this.forEach(function(valor, indice, arr) {
if (valor[prop1] == 100 && valor[prop2] == 110 && valor[prop3] == 1078 && valor[prop4] == 10) {
arr.splice(indice, 1);
}

});
}

myarray2.fnc2('clave_estado', 'clave_municipio', 'id_articulo', 'id_comentario');

console.log(myarray2);
console.log(myarray2.length);
console.timeEnd('b');
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}