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'); |