1. Согласно принципу неразрешенного ключа Ки в объекте JS, метод запоминания, что массив выглядит следующим образом в соответствии с наиболее обычным мышлением:
Код кода копирования следующим образом:
Функция informarray (arr) {
var obj = {}, temp = [];
for (var i = 0; i <arr.length; i ++) {
if (! obj [arr [i]]) {{
temp.push (arr [i]);
obj [arr [i]] = true;
}
}
Вернуть температуру;
}
var testarr = [1,2,3,2];
Console.log (instistarray (testarr));
Это выглядит довольно хорошо, но если это превращается в ситуацию:
var testarr1 = [1,2,3, "2"];
Console.log (instistarray (testarr));
Оказалось, что это то же самое. Полем
В ответ на вышесказанное мы улучшаем вышеуказанные методы:
Код кода копирования следующим образом:
Функция informarrayimprove (arr) {
var obj = {}, temp = [];
for (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;
}
}
Вернуть температуру;
}
Приведенный выше метод добавляет префикс Typeof, когда ключ помещается в объект, поэтому давайте посмотрим на эффект.
var testarr1 = [1,2,3, "2"];
Console.log (instistarray (testarr));
Упс, хорошо! Так что эта функция совершенно нормально, давайте посмотрим на другую ситуацию!
var testarr1 = [1,2,3, "2", {a: 1}, {b: 1}];
console.log (instistarray (testarr));
Этот результат, как удалить {b: 1}, чтобы необъяснить удалить его. Полем
2. В 1 в 1 наша основная идея состоит в том, чтобы использовать концепцию ключа в объекте JS, чтобы направлять наше мышление, но в конце концов нет решения всех проблем. Мы хотим
Используйте методы среза и сплайсинга для достижения веса массива следующим образом:
Код кода копирования следующим образом:
Функция DELANCERRAY2 (ARR) {{
var test = arr.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 ---;
}
}
}
Вернуть температуру;
}
тест:
var testarr1 = [1,2,3, "2"];
Console.log (instistarray (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");}]
Результаты испытаний все еще не могут удовлетворить наши потребности. После изучения вышеуказанных методов нашей команды мы обнаружили, что основные проблемы заключаются в работе по сравнению двух объектов. Равное, в связи с этой ситуацией, мы можем, мы, мы, мы, мы можем.
Код кода копирования следующим образом:
Функция DalcerAncerRayall (arr) {
var isequal = function (obj1, obj2) {{{
// два объекта равны, и они должны равны.
if (obj1 === obj2) {{
Вернуть истину;
}
if (typeof (obj1) == typeof (obj2)) {{{
if (ibj1) == "Object" && typeof (obj2) == "Object") {{{{{{{{{{
var pcount = 0;
for (var p in obj1) {
pcount ++;
if (! Isequal (obj1 [p], obj2 [p]) {{{
Вернуть ложь;
}
}
для (var p in obj2) {
pcount-;
}
Вернуть pcount == 0;
} Else if (typeof (obj1) == "function" && typeof (obj2) == "function") {
if (obj1.toString () !! = obj2.toString ()) {
Вернуть ложь;
}
} Еще {
if (obj1! = obj2) {{
Вернуть ложь;
}
}
} Еще {
Вернуть ложь;
}
Вернуть истину;
}
var test = arr.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 ---;
}
}
}
Вернуть температуру;
}
тест:
var testarr3 = [1,2,2, {a: 1}, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}, function () {alert ("B");}] ;;
console.log (instistararayall (testarr3));
// Результаты [1,2, {a: 1}, {a: 1, b: 2}, function () {alert ("b");}]
Ой, наконец, успешно завершил задачу тяжелого веса. Мы можем видеть, что последний метод - подчеркнуть закон, который может быть важен для сложных массивов, но соответствующие накладные расходы также довольно велики. тяжелый, который требует, чтобы мы гибко выбрали соответствующий алгоритм в соответствии с потребностями.