Испытание "Уникальные элементы"


#44

ну типа k - это счетчик совпадений, если он равен 1, то текущее число попадает в “уникальность”. т.к. в цикле число само себя один раз прогоняет, то как минимум 1 точно будет.

вот вам пример, почему нужно использовать понятные человеку переменные, т.к. позже код в любом случае подлежит аглификации и/или обфускации. решение через счетчик кстати не оптимальное, достаточно булева флага, либо использовать методы включения в массив.


#45

спасибо)


#46

Мне понравилось. Не додумался до сравнения первого и второго var. Гж


#47

Мой вариантик. Просто что бы было))

var numbers = [1, 4, 5, 9, 2, 5, 1];
var uniqueNumbers = [];

for (var i = 0; i < numbers.length; i++) {
  var oops = 0;
  for (var j = 0; j < numbers.length; j++) {
    if (numbers[i] === numbers[j]) {oops++;}}    
  if (oops === 1) {uniqueNumbers.push(numbers[i]);}
}

#48

Решила посредством отпиливания повторяющихся элементов. В консоли сработало, в минибраузере курса - выдаёт ошибку "Не удалось проинициализировать исходные переменные" (String). Что ему не нравится?

Сводка

var numbers = [1, 4, 5, 9, 2, 5, 1];

var findUnique = function (arr) {
var sorted = arr.sort();
for (var i = 0; i < sorted.length; i++) {
if (sorted[i] === sorted[i + 1]) {
delete sorted[i];
delete sorted[i + 1];
}
}
return sorted.filter(element => element !== null);
};

findUnique(numbers);


#49

могу точно сказать, что из-за сортировки неверный порядок получился.
P.S. вкурил, я так понимаю у академии тут баг, uniqueNumbers должен всегда инициализироваться в начале в виде пустого массива. видимо по замыслу создателей нужно просто было push в него элементы.

вот так получше будет, но вариант не оптимальный через delete
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];

const findUnique = arr => {
  let newArr = arr.slice();
  for (let i = 0; i < newArr.length; i++) {
    for (let j = i + 1; j < newArr.length; j++) {
      if (newArr[i] == newArr[j]) {
        delete newArr[i];
        delete newArr[j]
      }
    }
  }
  return newArr.filter(item => item != null);
};

uniqueNumbers = findUnique(numbers);
console.log(numbers);

#50

У меня так получилось:

for (var i=0; i <= numbers.length-1; i++) {
  
 
    var swap = numbers[i];
    numbers[i] = '';

         if (numbers.indexOf(swap) === -1 ) {
           uniqueNumbers.push(swap);
 
   }
  numbers[i] = swap;
  
}

#51

а вот мой вариант

var numbers = [1, 4, 5, 9, 2, 5, 1];
var uniqueNumbers = [];

var uniq = true;

for(var i = 0; i < numbers.length; i++) {
  
  for(var j = 0; j < numbers.length; j++) {
        if(i === j) {
            uniq = true;
          }
          else {
            if(numbers[i] === numbers[j]) {
              uniq = false;
              break
            } 
          }
    }
    
    if(uniq === true){  
      uniqueNumbers.push(numbers[i])
    }
}