Почему цикл начинается с 1?

176
29 июля 2018, 17:10

Почему проход второго цикла начинается с 1, а не с 0?

Сделайте функцию uniq, которая будет оставлять в массиве только уникальные элементы (то есть будет удалять дубли).

function uniq(arr){ 
        for(var i = 0; i <arr.length; i++){ 
            for(var j = 1; j < arr.length; j++){ 
                if(arr[i] == arr[j]){ 
                    arr = delElem(arr,arr[i]); 
                } 
            } 
        } 
        return arr; 
    } 
    console.log(uniq([1,8,5,8,12,13,12])); 
     
    function delElem(arr, num){ 
        var newarr =[]; 
        for(var i=0; i < arr.length; i++){ 
            if(arr[i] != num){ 
                newarr.push(arr[i]); 
            } 
        } 
        return newarr; 
    }

Answer 1

Чтобы не сравнивать нулевой элемент с самим же собой

Answer 2

function uniq(arr){ 
        for(var i = 0; i <arr.length; i++){ 
            for(var j = 1; j < arr.length; j++){ 
                if(arr[i] == arr[j]){ 
                    arr = delElem(arr,arr[i]); 
                } 
            } 
        } 
        return arr; 
    } 
    console.log(uniq([1,2,3,2,1])); 
    console.log(uniq([0,1,0,2,0,3,0,4])); 
     
    function delElem(arr, num){ 
        var newarr =[]; 
        for(var i=0; i < arr.length; i++){ 
            if(arr[i] != num){ 
                newarr.push(arr[i]); 
            } 
        } 
        return newarr; 
    }

Собственно этих 2 примеров достаточно чтобы понять что код ни работает ну никак просто.

Основная ошибка - в обычном цикле по массиву удалять элементы. Ну и дополнительно лишние циклы. Пример (я не JS поэтому код чуть некрасивый как это хотя бы будет работать).

function uniq(arr) { 
  var p = 0; 
  for (var i = 0; i < arr.length; i++) { 
    var u = true; 
    for (var j = 0; j < p; j++) { 
      if (arr[i] == arr[j]) { 
        u = false; 
        break; //!!!! 
      } 
    } 
    if (u) 
      arr[p++] = arr[i]; 
  } 
  return arr.splice(0, p); 
} 
console.log(uniq([1, 2, 3, 2, 1])); 
console.log(uniq([0, 1, 0, 2, 0, 3, 0, 4]));

Answer 3
function unique(arr) {
    if (!arr.length) {
        return[];
    }
    for (var i = 0, obj = {}; i < arr.length; i++) {
        obj[arr[i]] = true;
    }
    return Object.keys(obj);
}
console.log(unique([1, 8, 5, 8, 12, 13, 12])); // ["1", "5", "8", "12", "13"]
READ ALSO
Как менять позиции html блоков c помощью js?

Как менять позиции html блоков c помощью js?

Есть такая задача: Имеется пять html блоков, 4 по углам и один в центре, при нажатии на любой из угловых блоков центральный должен занимать позицию...

179
JS массив в Excel

JS массив в Excel

Есть массив объектов, которые нужно вывести в excel файлВсё делается правильно, но данные все слипаются, все узко и ничего не понятно

244
datepicker обернуть в функцию?

datepicker обернуть в функцию?

Кто то знает почему из функции не могу вызвать air datepicker?

211
function getHash()

function getHash()

У меня есть страничка, на которой есть меню, которое отвечает за содержание контента в окне, она реализована через:

246