1. Según el principio de la clave no repetida de Key en el objeto JS, el método de recordar la matriz es el siguiente de acuerdo con el pensamiento más convencional:
Copiar código del código de la siguiente manera:
Función distintearray (arr) {
var obj = {}, temp = [];
para (var i = 0; i <arr.length; i ++) {
if (! obj [arr [i]]) {{
temp.push (arr [i]);
obj [arr [i]] = true;
}
}
Regresar temp;
}
var tiendoRR = [1,2,3,2];
console.log (distintessArray (TaTarr));
Se ve bastante bien, pero si se convierte en una situación:
var tieTarr1 = [1,2,3, "2"];
console.log (distintessArray (TaTarr));
Resultó ser el mismo resultado. .
En respuesta a lo anterior, mejoramos los métodos anteriores:
Copiar código del código de la siguiente manera:
Función distintinTaRayImprove (arr) {
var obj = {}, temp = [];
para (var i = 0; i <arr.length; i ++) {
if (! obj [typeof (arr [i])+arr [i]) {) {
temp.push (arr [i]);
obj [typeof (arr [i])+arr [i]] = true;
}
}
Regresar temp;
}
El método anterior agrega el prefijo de TypeOf cuando la clave se coloca en el objeto, así que veamos el efecto.
var tieTarr1 = [1,2,3, "2"];
console.log (DistintentArray (TaTarr));
¡Vaya, bien! Entonces, esta función está completamente bien, ¡veamos otra situación!
var tiendoR1 = [1,2,3, "2", {a: 1}, {b: 1}];
console.log (distintionArray (TaTarr));
Este resultado, cómo eliminar {B: 1} para eliminarlo inexplicablemente. .
2. En 1 en 1, nuestra idea principal es usar el concepto de clave en el objeto JS para guiar nuestro pensamiento, pero al final no hay solución a todos los problemas. Queremos.
Use los métodos de corte y empalme para lograr el peso de la matriz, de la siguiente manera:
Copiar código del código de la siguiente manera:
Function distancRray2 (arr) {{
Var test = arr.slice (0);
para (var i = 0; i <temp.length; i ++) {
para (j = i+1; j <temp.length; j ++) {
if (temp [j] == temp [i]) {
Temp.Splice (J, 1);
J ---;
}
}
}
Regresar temp;
}
prueba:
var tieTarr1 = [1,2,3, "2"];
console.log (distintessArray (TaTarr));
var testarr2 = [1,2,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alerta ("b");}];;
// [1,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alert ("b (" b ");}]
Los resultados de la prueba aún no pueden satisfacer nuestras necesidades. Después de estudiar los métodos anteriores de nuestro equipo, descubrimos que los principales problemas están en la operación de comparar los dos objetos. igual. En vista de esta situación, podemos, nosotros, nosotros, nosotros, nosotros, podemos.
Copiar código del código de la siguiente manera:
Función distancerrayall (arr) {
var isEqual = function (obj1, obj2) {{
// Dos objetos son iguales y deben igual.
if (obj1 === obj2) {{
Devolver verdadero;
}
if (typeof (obj1) == typeof (obj2)) {{
if (ibj1) == "Object" && tipof (obj2) == "objeto") {{
var pCount = 0;
para (var p en obj1) {
pCount ++;
if (! isequal (obj1 [p], obj2 [p]) {{
Devolver falso;
}
}
para (var p en obj2) {
pCount-;
}
Return pCount == 0;
} Else if (typeof (obj1) == "function" && typeof (obj2) == "función") {
if (obj1.ToString () !! = obj2.ToString ()) {
Devolver falso;
}
} Demás {
if (obj1! = obj2) {{
Devolver falso;
}
}
} Demás {
Devolver falso;
}
Devolver verdadero;
}
Var test = arr.slice (0);
para (var i = 0; i <temp.length; i ++) {
para (j = i+1; j <temp.length; j ++) {
ifqual (temp [j], temp [i]) {{) {{
Temp.Splice (J, 1);
J ---;
}
}
}
Regresar temp;
}
prueba:
var tiendoR3 = [1,2,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alerta ("b");}];;
console.log (distintinTaRayall (tiendoR3));
// Resultados [1,2, {A: 1}, {A: 1, B: 2}, function () {alerta ("b");}]
Vaya, finalmente completó con éxito la tarea de peso pesado. Podemos ver que el último método es enfatizar la ley, que puede ser importante para matrices complejas, pero la sobrecarga de ejecución correspondiente también es bastante grande. ¡Heavy, lo que requiere que elijamos de manera flexible el algoritmo correspondiente de acuerdo con las necesidades.