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

Почему-то не пользуются “успехом” варианты с RegExp-ами. В качестве “пробного шара”…

var getDocumentsNumbers = function (docList, year) {
var pattern = year + ‘$’;
var accum = 0;

for (var i = 0; i < docList.length; i++) {
if (docList[i].search (pattern) != -1) {accum++;}
}
return accum;
}

2 Симпатий

Не стала использовать indexOf(), пошла окольным путём

var getDocumentsNumbers = function (docs, year) {
var findYear = 0;
var round = 0;
total = 0;

for (var i = 0; i <= docs.length-1; i++) {
//переводим дату из строки в число, получаем из него год
findYear = parseInt(docs[i], 10);
findYear /= 10000;
round = Math.round(findYear);
findYear = Math.round((findYear - round)*10000);

if (findYear==year) {total++}
}
return total;
};

можно было чуть упростить через остаток от деления, типа
findYear = docs[i] % 10000;
заодно и к числу приводить не надо (арифметика сама это сделает) и округления излишни (минус 7 строк кода).

О, точно) программа стала короче

var getDocumentsNumbers = function (docs, year) {
var findYear = 0;
total = 0;

for (var i = 0; i <= docs.length-1; i++) {
findYear = parseInt(docs[i], 10);
findYear = docs[i] % 10000;
if (findYear==year) {total++}
}
return total;
};

parseInt тоже не надо =)

коротулечка
function getDocumentsNumbers(docs, year) {
  let total = 0;
  for (let i = 0; i < docs.length; i++) {
    if (docs[i] % 10000 == year) { total++; }
  }
  return total;
}
3 Симпатий
const getDocumentsNumbers = (data, year) => 
  data.reduce((acc, e) => Number(e.slice(-4)) === year ? acc + 1 : acc, 0);
2 Симпатий

if (year > -1) для тупых, почему -1 ?

indexOf() возвращает индекс подстроки, если не находит возвращает -1

Используя современные средства - smth just like this)
const getDocumentsNumbers = (arr, year) => {
  const lastTwoNumbersOfYear = year.toString().substring(year.toString().length - 2);
  let smallArr = arr.map(item => item.substring(item.length - 2));
  return smallArr.filter(item => item === lastTwoNumbersOfYear).length;
};

может чуть позже через reduce решу) -
будет похоже - только смысл, что через массив одиножды проходимся)

Тогда уже вот так, в одну строку

const getDocumentsNumbers = (arr, year) => arr.filter(item => item.substring(item.length - 4) === year.toString()).length;

норм, но -4 магическое число

if (arr[i].indexOf(year, 4) !== -1) {
Объясните пожалуйста, почему стоит не просто (year) , a (year, 4). Что это за 4 и что она дает?

когда непонятно как работает какой-то метод, читайте документацию
второй аргумент - это индекс, с которого начинать поиск (по-умолчанию 0 и его опускают)

Редьюс с выносом регулярного выражения:

const getDocumentsNumbers = (data, year) => {
const re = new RegExp(year + ‘$’, ‘gi’);
return data.reduce((acc, item) => item.match(re) ? acc + 1 : acc, 0);
};

var getDocumentsNumbers = function(date, year) {
  var quantityYears = 0;
  for (var i=0; i<=date.length-1; i++) {
    date[i] = parseInt(date[i].slice(-4), 10);
    if (date[i] === year) {
      quantityYears++;
    }
  } return quantityYears;
}

Через форыч, например

const getDocumentsNumbers = (arr, year) => {
  let docs = [];
  arr.forEach((doc) => {
    if (doc.endsWith(`${year}`)) {
      docs.push(doc);  
    }
  });
  
  return docs.length;
};

Вроде работает без ошибок.

Сводка

var getDocumentsNumbers = (nameDoc,years) => {
var result = 0;
for(var i = 0; i < nameDoc.length; i++){
if (nameDoc[i].endsWith(years) === true){
result += 1;
}
}
return result;
}

Без Гугла и indexOf:

Сводка

var getDocumentsNumbers = function(array, year) {
var sum = 0;
for(var i = 0; i < array.length; i++) {
var n = array[i];
if(year == n[4] + n[5] + n[6] + n[7]) {
sum++;
}
}
return sum;
}

Ого, почти 2 месяца колупаю JS и первый раз слышу вообще об RegExp, погуглил, интересненько, осталось разобраться насколько актуально им пользоваться.

Мой вариант через match :)

let getDocumentsNumbers = (basa, filtrs) => basa.filter(a=>a.slice(-4).match(filtrs)).length