1. De acordo com o princípio da chave não repetida de Key no objeto JS, o método de lembrar que a matriz é a seguinte de acordo com o pensamento mais convencional:
Copie o código do código da seguinte forma:
Função distinctArray (arr) {
var obj = {}, temp = [];
for (var i = 0; i <arn.length; i ++) {
if (! obj [arr [i]]) {{
temp.push (arr [i]);
obj [arr [i]] = true;
}
}
Retornar temp;
}
var testarr = [1,2,3,2];
console.log (DistinctArray (Testarr));
Parece muito bom, mas se se transformar em uma situação:
var testarr1 = [1,2,3, "2"];
console.log (DistinctArray (Testarr));
Acabou sendo o mesmo resultado. .
Em resposta ao acima, melhoramos os métodos acima:
Copie o código do código da seguinte forma:
Função distinctArrayimprove (arr) {
var obj = {}, temp = [];
for (var i = 0; i <arn.length; i ++) {
if (! obj [typeof (arr [i])+arr [i]) {) {
temp.push (arr [i]);
obj [typeof (arr [i])+arr [i]] = true;
}
}
Retornar temp;
}
O método acima adiciona o prefixo do TypeOf quando a chave é colocada no objeto, então vamos ver o efeito.
var testarr1 = [1,2,3, "2"];
console.log (DistinctArray (Testarr));
Opa, bom! Então, essa função está completamente bem, vamos ver outra situação!
var testarr1 = [1,2,3, "2", {a: 1}, {b: 1}];
console.log (distinctArray (testarr));
Este resultado, como excluir {b: 1} para excluir inexplicavelmente. .
2. Em 1 em 1, nossa idéia principal é usar o conceito de chave no objeto JS para orientar nosso pensamento, mas no final não há solução para todos os problemas. nós queremos
Use os métodos de fatia e emenda para obter o peso da matriz, como segue:
Copie o código do código da seguinte forma:
Função distancerray2 (arr) {{
var teste = ar.slice (0);
for (var i = 0; i <temp.length; i ++) {
for (j = i+1; j <temp.length; j ++) {
if (temp [j] == temp [i]) {
temp.splice (j, 1);
j ---;
}
}
}
Retornar temp;
}
teste:
var testarr1 = [1,2,3, "2"];
console.log (DistinctArray (Testarr));
var testarr2 = [1,2,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alert ("b");}] ;;
// [1,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alert ("b ("B");}]
Os resultados do teste ainda não podem atender às nossas necessidades. Depois de estudar os métodos acima de nossa equipe, descobrimos que os principais problemas estão na operação de comparar os dois objetos. igual.
Copie o código do código da seguinte forma:
Função distancerrayall (arr) {
var isequal = function (obj1, obj2) {{
// Dois objetos são iguais e devem ser iguais.
if (obj1 === obj2) {{
Retornar true;
}
if (typeof (obj1) == typeof (obj2)) {{
if (ibj1) == "objeto" && typeof (obj2) == "objeto") {{
var pcount = 0;
para (var p em obj1) {
pcount ++;
if (! isequal (obj1 [p], obj2 [p]) {{
Retornar falso;
}
}
para (var p em obj2) {
pcount-;
}
Return pcount == 0;
} Else if (typeof (obj1) == "function" && typeof (obj2) == "function") {
if (obj1.toString () !! = obj2.toString ()) {
Retornar falso;
}
} Outro {
if (obj1! = obj2) {{
Retornar falso;
}
}
} Outro {
Retornar falso;
}
Retornar true;
}
var teste = ar.slice (0);
for (var i = 0; i <temp.length; i ++) {
for (j = i+1; j <temp.length; j ++) {
ifqual (temp [j], temp [i]) {{) {{
temp.splice (j, 1);
j ---;
}
}
}
Retornar temp;
}
teste:
var testarr3 = [1,2,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alert ("b");}] ;;
console.log (distinctArrayall (testarr3));
// resulta [1,2, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}]
Opa, finalmente concluiu com sucesso a tarefa de peso pesado. Podemos ver que o último método é enfatizar a lei, que pode ser importante para matrizes complexas, mas a sobrecarga de execução correspondente também é bastante grande. Pesado, o que exige que escolhamos flexivelmente o algoritmo correspondente de acordo com as necessidades.