интересное задание, маленько пришлось подумать )
мой вариант:
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;
};
изначально так и писал arr[i].indexOf(year, 4)
но у меня выдавало ошибку, что indexOf - не известная функция
после ввел дополнительно переменную и тогда система приняла
Здесь решение зависит от того в каком виде
поступают “названия документов” из массива:
в таком “11052012” - как строки, или
в таком 01052012 - как числа. Потому как
второй вариант содержит два вида данных,
в разных системах исчисления.
01052012 - восьмеричная система;
11052012 - десятеричная система.
Для учета систем исчисления используем
toString().
В принципе, можно написать
функцию принимающую все варианты…
Смотрите. В тестах вам приходят данные в строках [‘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;
};
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;
};