• XSS.stack #1 – первый литературный журнал от юзеров форума

js junior задача

koshak

CD-диск
Пользователь
Регистрация
19.11.2020
Сообщения
13
Реакции
1
после ознакомления с языком - захотелось решить задачи, дабы появилась набитая рука.
задача: посчитать кол-во букв в строке, пример:

['a', 'b', 'c', 'c', 'c'];
[a, 1]
[b, 1]
[c:, 3]

начал решать, вот что получилось
JavaScript:
const p = ['a', 'b', 'c', 'c', 'c'];
const b = [];

for (let key in p) {
    b.push([p[key], 1]);
}

console.log(b);

поймал себя на мысли, что не могу понять как сделать проверку, что в массиве уже есть буква и вместо очередного добавления надо сделать ++. какие методы решения проблемы?

а еще как-то приунылось с того, что весь день не могу решить простую задачу.....
 
а тебе обязательно использовать массив для хранения количества символов или можно выбрать другую структуру данных?
любую другую, просто выбрал массив
 
любую другую, просто выбрал массив
тогда лучше стоит посмотреть в сторону объекта или мап, они больше подходят под твою задачу
логика твоей программы должна выглядеть примерно так:
  1. Создаем переменную для хранения количества букв в строке
  2. Начинаем проходить по массиву символов
  3. На каждой итерации цикла проверяем существует ли ключ(символ из массива символов) в переменной, которая хранит количество букв в строке
  4. Если нет, то добавляем это ключ и в качестве значения для этого ключа указываем 1. Если есть, то прибавляем к значению этого свойства единицу
JavaScript:
const p = ['a', 'b', 'c', 'c', 'c', 'a', 'e'];
const b = {}; // этап 1

for (let i = 0; i < p.length; i++) { // этап 2
    if (!b.hasOwnProperty(p[i])) { // этап 3
        b[p[i]] = 1; // этап 4
    }
    else {
        b[p[i]] += 1; // этап 4
    }
}

console.log(b);

объект хранит данные в формате ключ-значение, т.е.
JavaScript:
b = {
"a": 1,
"b": 1,
"c": 3
}
запись типа
JavaScript:
 p[i]
берет из массива элемент i, а запись
JavaScript:
b[p[i]] = 1
если элемента i из массива p нет в объекте b, то он туда добавляется в качестве ключа, а в качестве значения записывается 1, в итоге получается
JavaScript:
b = {
"<значение элемента i из массива>": 1
}
метод hasOwnProperty проверяет есть ли в объекте определенный ключ или нет
 
я тебе написал вариант с использованием объекта, попробуй для практики переписать этот же алгоритм, только вместо объекта используй мап. Если не получится, то жду вопросы
 
я тебе написал вариант с использованием объекта, попробуй для практики переписать этот же
JavaScript:
const arr = ['a', 'b', 'c', 'c', 'c', 'c'];
const result = new Map();
for (let i = 0; i < arr.length; i++) {
  if (!result.has(arr)) {
    result.set(arr[i], 1);
  } else {
    
  }
}

console.log(result)
складывается ощущение, что и проверка, что там есть значение - не нужна. Всё вроде легко, но я не понимаю как добавить + 1, по значению добавления не нашел.

JavaScript:
const p = 'qwewqewqwqewqeqweqwfgvfebrtebrtkobkrtbokrbt';
const arr = {}
for(const number of p) {
  arr[number] = (arr[number] ?? 0) + 1
}

console.log(arr)

код, что выше - я переделал, очень лаконично получилось
 
Последнее редактирование:
друг, привет! Лучше напиши морской бой на js - в тысячу раз эффективнее, чем разнокаллиберные алгоритмы подбирать к простым задачам. И, к слову, наиболее эффективным был бы алгоритм с регулярными выражениями - там ресурсов на вычисления, вроде бы, должно быть меньше
 
JavaScript:
const arr = ['a', 'b', 'c', 'c', 'c', 'c'];
const result = new Map();
for (let i = 0; i < arr.length; i++) {
  if (
for (let i = 0; i < arr.length; i++) {
    if (!result.has(arr[i])) {
        result.set(arr[i], 1);
    } else {
        let element = result.get(arr[i])
        result.set(arr[i], element += 1)
    }
}
) {
    result.set(arr[i], 1);
  } else {
 
  }
}

console.log(result)
складывается ощущение, что и проверка, что там есть значение - не нужна. Всё вроде легко, но я не понимаю как добавить + 1, по значению добавления не нашел.
1. Проверка нужна, а иначе ты не сможешь понять, нужно ли добавлять ключ или увеличивать значение у существующего ключа
if (!result.has(arr)) {
у тебя здесь берется весь массив, т.е ['a', 'b', 'c', 'c', 'c', 'c'] и проверяется есть ли этот весь массив в result, а тебе нужно взять только один элемент из массива arr и проверить его существование в result, т.е вместо
JavaScript:
 if (!result.has(arr))
должно быть
JavaScript:
 if (!result.has(arr[i]))

а для добавления значения +1 нужно сначала получить текущее, затем это текущее значение записать в result, прибавив к нему +1
JavaScript:
const arr = ['a', 'b', 'c', 'c', 'c', 'c'];
const result = new Map();

for (let i = 0; i < arr.length; i++) {
    if (!result.has(arr[i])) {
        result.set(arr[i], 1);
    } else {
        let element = result.get(arr[i])
        result.set(arr[i], element += 1)
    }
}
 
1. Проверка нужна, а иначе ты не сможешь понять, нужно ли добавлять ключ или увеличивать значение у существующего ключа

у тебя здесь берется весь массив, т.е ['a', 'b', 'c', 'c', 'c', 'c'] и проверяется есть ли этот весь массив в result, а тебе нужно взять только один элемент из массива arr и проверить его существование в result, т.е вместо
JavaScript:
 if (!result.has(arr))
должно быть
JavaScript:
 if (!result.has(arr[i]))

а для добавления значения +1 нужно сначала получить текущее, затем это текущее значение записать в result, прибавив к нему +1
JavaScript:
const arr = ['a', 'b', 'c', 'c', 'c', 'c'];
const result = new Map();

for (let i = 0; i < arr.length; i++) {
    if (!result.has(arr[i])) {
        result.set(arr[i], 1);
    } else {
        let element = result.get(arr[i])
        result.set(arr[i], element += 1)
    }
}
я мб тупой, но не настолько, что arr написать, не смог. Это сайт удаляет, спасибо ещё раз)
друг, привет! Лучше напиши морской бой на js - в тысячу раз эффективнее, чем разнокаллиберные алгоритмы подбирать к простым задачам. И, к слову, наиболее эффективным был бы алгоритм с регулярными выражениями - там ресурсов на вычисления, вроде бы, должно быть меньше
а в чем его сложность? вроде, бахнул по координатам и всё.

arr [ i ] сайт удаляет)
 
Не самое элегантное решение, но вот условно


JavaScript:
    // Write a function for counting unique values in a 2D array.
    // Example: countUnique(['a', 'a', 'b', 'c'])
    // Returns ["a", 2], ["b", 1], ["c", 1]
    function countUnique(arr) {
        var result = [];
        var unique = {};
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr[i].length; j++) {
                if (!unique[arr[i][j]]) {
                    unique[arr[i][j]] = 1;
                } else {
                    unique[arr[i][j]]++;
                }
            }
        }
        for (var key in unique) {
            result.push([key, unique[key]]);
        }
        return result;
    }
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх