Luego de consultar con especialistas en el tema, programadores de varias áreas y profesores hemos dado con la respuesta al problema y la dejamos plasmada en esta publicación.
Solución:
En términos generales, esto se logra mejor con un objeto, ya que JavaScript realmente no tiene matrices asociativas:
var foo = bar: 0 ;
Entonces usa in
para comprobar si hay un key:
if ( !( 'bar' in foo ) )
foo['bar'] = 42;
Como se señaló correctamente en los comentarios a continuación, este método es útil solamente cuando tu keys serán cadenas, o elementos que se pueden representar como cadenas (como números).
var a = [1,2,3], b = [4,1,5,2];
b.forEach(function(value)
if (a.indexOf(value)==-1) a.push(value);
);
console.log(a);
// [1, 2, 3, 4, 5]
Para obtener más detalles, lea en Array.indexOf
.
Si desea confiar en jQuery, utilice en su lugar jQuery.inArray
:
$.each(b,function(value)
if ($.inArray(value,a)==-1) a.push(value);
);
Si todos sus valores son simples y únicos representables como cadenassin embargo, debe usar un Objeto en lugar de una Matriz, para un potencial masivo aumento de velocidad (como se describe en la respuesta de @JonathanSampson).
Se proporciona una mejor alternativa en ES6 usando Sets. Entonces, en lugar de declarar Arrays, se recomienda usar Sets si necesita tener un array eso no debería agregar duplicados.
var array = new Set();
array.add(1);
array.add(2);
array.add(3);
console.log(array);
// Prints: Set(3) 1, 2, 3
array.add(2); // does not add any new element
console.log(array);
// Still Prints: Set(3) 1, 2, 3
Si haces scroll puedes encontrar las crónicas de otros creadores, tú de igual manera tienes la habilidad dejar el tuyo si lo crees conveniente.