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

Да, действительно отлично у него составлен код. Осталось только прочитать про lastIndexOf. Я так понял что он проверял является ли индекс какого либо числа им же, но последним

не совсем, indexOf возвращает индекс позиции, где была впервые найдена подстрока
lastIndexOf делает то же самое, но возвращает индекс позиции, где была в последний раз найдена подстрока
поскольку искомой подстрокой является элемент массива, то если оба метода возвращают один и тот же индекс, то они ссылаются на один и тот же элемент, а значит этот элемент уникален.

4 лайка

Я так и понял. Просто описал не работу lastIndexOf, а всей строки проверки. Немного только не понятно по какой причине в академии не было ни строчки про этот метод, ведь он по сути противоположность indexOf. Хватило бы и одной строки про него…

1 лайк

а тут много упрощающих жизнь методов не описано(типа вы сами изобретаете велосипед). типа на интенсив идти надо.

1 лайк

Изобретение велосипедов бывает полезно, когда эти велосипеды очень маленькие). Интересно насколько быстро работает библиотечный метод в сравнении с приведенными тут “велосипедными” примерами

только это нативный метод.
ну изобретать велосипеды чтобы описать работу нативных методов - ну такое…

Изобретать только для того, что бы понять примерно как мыслить. Кирпичик так сказать создать в голове. Я пока что не работал программистом, но думаю, что такие задания как никак помогают в разработке своих более серьезных программ или библиотек. А так конечно нет смысла писать аналоги нативных методов, особенно если те и так работают максимально быстро и безопасно

курсы к сожалению не помогают мыслить правильно. вы никогда не найдете тут ответов на такие простые вопросы, типа почему если null == 0 (false) и null > 0 (false), то null >= 0 (true)
или почему выражение вида [+!+[]]+[+[]] имеет смысл в JS
курсы лишь неплохой старт к изучению (самостоятельно по самомучителям или по интенсивам)

Вот тут с вами полностью согласен. Изучал си по книге, там очень много нюансов описано было. А тут можно сказать демо версия языка или технологии, но зато в интерактивной форме что добавляет интереса как раз для старта. Дальше планирую http://learn.javascript.ru/ вот тут изучать. Или книгу какую нибудь может посоветуете, если далеко продвинулись в JS?

самомучитель Кантора вполне сойдет. только учтите что там задачи на порядок сложнее, чем тут

Спасибо за рекомендацию. тут задачи понятно, что простые. в массивах например куча заданий решалась где то в 3 строки. Ещё вопросик: у него есть курсы и есть книги, это они https://webbooks.com.ua/books-main/javascript/sovremennyj-uchebnik-javascript-ilya-kantop-3-knigi-2015-pdf/ ?

http://learn.javascript.ru/ собственно и есть его проект. там и в пдф есть учебник этот, ну и курсы продаются тоже.

Мой код: var numbers = [1, 4, 5, 9, 2, 5, 1];
var uniqueNumbers = [];
for (var i = 0; i < numbers.length; i++) {
var number = numbers[i];
var firstIndex = numbers.indexOf(number);
var secondIndex = numbers.lastIndexOf(number);

if (firstIndex === secondIndex) {
uniqueNumbers.push(number)
}
}

Далеко не самое красивое решение, но такого здесь еще не было.

Мой вариант
var numbers =  [101,15,116,20,116,15,2];
var uniqueNumbers = [];

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

for (var k = 0; k < numbers.length; k++) {
  if (numbers[k] > 0) {
    uniqueNumbers.push(numbers[k]);
    }
  }

через filter -

Сводка
let uniqueNumbers = [];

const isUnique = (arr, el) => arr.filter(a => a === el).length === 1;
const uniqueElements = (data) => {
    return data.filter(item => isUnique(data, item));
};

uniqueNumbers = uniqueElements(numbers);

у вас сложность алгоритма O(n^2)
можно же проще через O(n):

let uniqueNumbers = numbers.filter(item => numbers.indexOf(item) == numbers.lastIndexOf(item));

@sasha_sm Есть такое очучение, что в проверке неправильно что-то работает, потому что такая запись возвращает в тестах пустой массив, но это не так в консоли.
P.S. да, я понимаю что решение не из тех, что учат на интерактивах, но все же

я знаю, что у меня усложненный алгоритм,
я видел решение Снайпера через lastIndexOf и IndexOf - уже после того, как написал свое

Это гениально!

Класс. Действительно самое оптимальное и удобочитаемое :+1:t2:

if (k === 1) не могу понять, как это работает?