Перекладывание бумажек

интересное задание, маленько пришлось подумать )
мой вариант:

var getDocumentsNumbers = function (nameDoc, years) {
var j = 0;
  for (var i = 0; i < nameDoc.length; i++) {
      var ye = nameDoc[i];
      var year = ye.indexOf(years, 4);
      if (year > -1) {
        j = j + 1;
      }
  }
return j;
}

Чуть короче, смысл тот же.

Код
var getDocumentsNumbers = function (arr, year) {
  var counter = 0;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i].indexOf(year, 4) !== -1) {
      counter++;
    }
  }
  return counter;
};
5 лайков

изначально так и писал arr[i].indexOf(year, 4)
но у меня выдавало ошибку, что indexOf - не известная функция
после ввел дополнительно переменную и тогда система приняла

У меня была похожая проблема, когда забыла дописать [i].

если [i] не дописать ошибки не будет, просто counter++ не будет считать, а ошибки о которой я говорил не будет. у меня так

Да, правильно. Возможно ошибка была до того, как я поместила indexOf внутри условия. Не могу воспроизвести ее снова.

та же хрень, только и дополнительная переменная не помогла…


Попробуйте результат этого присвоить переменной.

так?


или так?

Кажется я разобралась, в чем проблема. Элементы массива должны быть строками, то есть написаны в кавычках.

тогда авторам курса надо бы исправить это в условии описывая “формат документа”

Согласна. @GreenLera, посмотрите.

тем кто “отважный” .toString() в помощь…

Осторожно, спойлеры!!!

Здесь решение зависит от того в каком виде
поступают “названия документов” из массива:
в таком “11052012” - как строки, или
в таком 01052012 - как числа. Потому как
второй вариант содержит два вида данных,
в разных системах исчисления.
01052012 - восьмеричная система;
11052012 - десятеричная система.
Для учета систем исчисления используем
toString().
В принципе, можно написать
функцию принимающую все варианты…

Спасибо, сейчас поправлю!

Проверила. Данные приходят в виде строк. В текстах только отображаются в виде чисел, это я поправлю. А так там строки

@ Kotohaker

Смотрите. В тестах вам приходят данные в строках [‘1234’, ‘3211’]. Метод indexOf() работает со строками, а не с числами. А вы в примерах кода пытаетесь этот метод вызвать на числе. Поэтому консоль вам и говорит, что такой функции нет. Потому что это так не работает.

В теории я добавила уточнение, что в данных строки. И поправила то, как выглядит массив данных в тестах. В ближайшее время это будет на сайте

да… Выше я отписался, что в теме…

как числа:

как строки:

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

Вот такой ещё вариант:

var getDocumentsNumbers = function (array, year) {
  var finalAmount = 0;

  for (var i = 0; i < array.length; i++) {
    if (+array[i].slice(4) === year) {
      finalAmount++;
    }
  }
  
  return finalAmount;
};
4 лайка

Решение без indexOf

Сводка

var getDocumentsNumbers = function (nameDocument, year){
var counter = 0;
for (var i = 0; i < nameDocument.length; i++){
var residue = parseInt(nameDocument[i], 10) - parseInt(year, 10);
if (residue % 1000 === 0){
counter++
}
}
return counter;
};

1 лайк