зачем юзать те фичи, которые люди, проходившие только тренажёр, знать не могут ?
разве меня что то ограничивает залезть на MDN JS и найти подходящие функции для решения задачи? ну нет же обязательства только из тренажера черпать инфу. Может кому будет интересно сравнить свой код написанный на основе знаний полученных на курсе с моим. На момент написания этого кода я впервые познакомился с данными функциями и достаточно много времени потратил на задачу учитывая доп. изучение.
Через slice
function getDocumentsNumbers (document, year) {
let summDocument = 0;
for (i = 0; i < document.length; i++) {
if (year == document[i].slice(4)) {
summDocument++
}
}
return summDocument
}
Решение без использования indexOf и других вспомогательных функций (включая Number).
Мое решение построено на том, что каждый ‘строчный’ (типа string) элемент массива сам является массивом последовательно представленных символов, на который распространяются все правила работы с массивом. Например: ‘пример’ - это массив [‘п’, ‘р’, ‘и’, ‘м’, ‘е’, ‘р’].
Сам код с комментариями:
let getDocumentsNumbers = function (names, year) {
let counter = 0; //счетчик
for (let i = 0; i < names.length; i++) {
let yearNum = ''; //строка, в которую записываются символы из имени документа
for (let j = 4; j < names[i].length; j++) {
yearNum += names[i][j]; //добавляем символы из имени с 5го по 8
}
if (yearNum == year) //сравниваем с приведением полученную строку и искомый год
{
counter ++; //если значения равны, плюсуем счетчик
}
}
return counter;
}
let getDocumentsNumbers = function (documentNames, year) {
let count = 0;
for (let i = 0; i < documentNames.length; i++) {
if (documentNames[i].lastIndexOf(year) !== -1 && documentNames[i].lastIndexOf(year) === 4) {
count++
}
}
return count;
}
Сперва пытался решить через перевод содержимого i того значения в String и далее в строчном элементе искать год начиная с 4 индекса строчного элемента, но время было позднее а с первого раза у меня не вышло. Тут я вспомнил про indexOf (x, y ) и решение родилось мгновенно:
let counter = 0;
let getDocumentsNumbers = function (arr, year) {
for (let i=0; i<=arr.length-1; i++) {
if (arr[i].indexOf(year,4)>=0) {counter++}
}
return counter
}
Все работает, но таких записей “names[i] [j]” мы точно не проходили, как они работают?
в задании сказано, что
Даты из массива записаны в виде строк.
То есть любой элемент массива будет строкой типа ‘ДДММГГГГ’ - нас интересуют последние 4 символа ГГГГ. Так вот строка ‘ДДММГГГГ’ - это тоже массив из 8 символов, у каждого из которых есть порядковый номер. Тогда сам массив с именами документов - это массив массивов вида
[ [ … ], [ … ], …, [ … ] ].
Можно взять любой его элемент по номеру array[ i ] - это тоже массив, и обратиться к любому из его элементов через (array[ i ])[ j ] или array[ i ][ j ]. Как то так:
Благодарю за развернутый ответ.
Мой вариант без indexOf()
Код
let getDocumentsNumbers = function(nameArr, year) {
let flag = 0;
for(let i = 0; i < nameArr.length; i++) {
let stringToNumber = Number(nameArr[i]);
let checkYears = 0;
checkYears = stringToNumber % 10000;
if(checkYears === year) {
flag++;
}
}
return flag;
}
let nameArr = [];
getDocumentsNumbers();
Ничего лишнего. Без индексофов. Коротко и работает:
let getDocumentsNumbers = function (array, year) {
sum = 0;
for (let i = 0; i <= array.length - 1; i++) {
if(array[i] % 10000 === year) {
sum++;
}
}
return sum;
}
let getDocumentsNumbers = function (documents, year) {
return documents.filter(document => document.lastIndexOf(year) > 3).length
}
Здравствуйте, кто может разъяснить зачем нужен “+1” в конце строки и почему без него не работает?
рабочий код, проходит проверку.
let getDocumentsNumbers = function(
arrayOfDocuments, year){
let count = 0;
for(let i = 0; i < arrayOfDocuments.length; i++){
if(arrayOfDocuments[i].indexOf(year, 4) === 4){
count ++;
}
}
return count;
};
let getDocumentsNumbers = function (array, year) {
let docsNumber = 0;
for (let i = 0; i < array.length; i++) {
let s = array[i]
if (Number(s[4] + s[5] + s[6] + s[7]) === year) {
docsNumber++;
}
}
return docsNumber;
}
var getDocumentsNumbers = function(documentsName, year) {
var quantityDocuments = 0;
for(var i = 0; i<documentsName.length; i++) {
if(documentsName[i].indexOf(String(year),4) > 0) {
quantityDocuments++;
}
}
return quantityDocuments;
}
Вариант с IndexOf
Сводка
let getDocumentsNumbers = function (arrDocument, year){
let countDocument = 0;
for(let i = 0; i < arrDocument.length; i++){
let item = arrDocument[i];
if(item.indexOf(String(year), 4) !== -1){
countDocument ++;
}
}
return countDocument;
}
Альтернативный подход. P.S. (код курильщика)
let getDocumentsNumbers = function (arrDocument, year){
let countDocument = 0;
let yearLength = String(year).length;
for(let i = 0; i < arrDocument.length; i++){
let arrItemYear = '';
let currentItem = arrDocument[i];
for(let j = yearLength; j > 0; j--){
arrItemYear += currentItem[currentItem.length - j]
}
if(Number(arrItemYear) == Number(year)){
countDocument++;
}
}
return countDocument;
}
Решение без IndexOf и иных методов. На чистых циклах
P.S. С IndexOf 'это становиться уж слишком просто
let getDocumentsNumbers = function (documents, year) {
let amount = 0;
year = String(year);
for (let i = 0; i < documents.length; i++) {
let word = String(documents[i]);
for (let j = 4, k = 0, coincidence = 0; j < word.length; j++) {
if (word[j] === year[k]) {
coincidence++;
k++
}
if (coincidence === 4) {
amount++;
}
}
}
return amount;
}
Как думаешь почему не пользуються усехом?
МОЖЕТ ПОТОМУ ЧТО НИКТО ТУТ НЕ ЗНАЕТ ОБ ЭТОМ?
Потому что курс для новичков?!
let getDocumentsNumbers = function(nameDoc, year) {
let numberDoc = 0;
year = String(year);
for (let i = 0; i < nameDoc.length; i++) {
if(nameDoc[i].indexOf(year, 4) !== -1) {
numberDoc++;
};
};
return numberDoc;
};