Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2022, 10:25
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Найти количество одинаковых пар в массиве
Помогите пожалуйста поправить в коде так, чтобы всё отработало. Вот мой код:

function numberOfPairs(gloves) {

    let count = 0;
    for (let i = 0; i < gloves.length; i++) {
        for (let j = 0; j < i; j++) {
            if ((gloves[i] == gloves[j])) {

                count++;
            }

        }
    }
    return count;
}

console.log(numberOfPairs(["red", "green", "red", "blue", "blue"])); // 2
console.log(numberOfPairs(["gray", "green", "red", "blue", "yellow"])); // 0
console.log(numberOfPairs(["gray", "green", "red", "green", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3


Если все элементы одинаковы, то у меня выводит число 15 в последнем вызове тут console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); - должно быть 3.
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2022, 10:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

NovichokJS,
что такое пара?
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2022, 10:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

NovichokJS,
function numberOfPairs(gloves) {
    const obj = {};
    let count = 0;
    for (let el of gloves) {
       obj[el] = (obj[el]||0)+1;
       obj[el] %= 2;
       obj[el] || count++;
    }
    return count;
}

console.log(numberOfPairs(["red", "green", "red", "blue", "blue"])); // 2
console.log(numberOfPairs(["gray", "green", "red", "blue", "yellow"])); // 0
console.log(numberOfPairs(["gray", "green", "red", "green", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2022, 10:47
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
NovichokJS,
что такое пара?
это пара одинаковых цветов в массиве - считается если 2 значчения равны в массиве, тогда к count прибавляем 1. В случае console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3
у нас 3 одинаковых пары, поэтому должно вернуть количество равное 3.
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2022, 10:54
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

function numberOfPairs(gloves) {
    let tmp = {};
    for (let item of gloves) tmp[item] = ++tmp[item] || 1;
    return Object.values(tmp).reduce((a, v) => a + Math.floor(v / 2), 0);
}

Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2022, 11:26
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от Vlasenko Fedor Посмотреть сообщение
function numberOfPairs(gloves) {
    let tmp = {};
    for (let item of gloves) tmp[item] = ++tmp[item] || 1;
    return Object.values(tmp).reduce((a, v) => a + Math.floor(v / 2), 0);
}

круто, можете объяснить подробно что тут происходит tmp[item] = ++tmp[item] || 1;
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2022, 11:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от NovichokJS
строки 5, 6 ,7
obj[el] = (obj[el]||0)+1;

если название(el) встретилось добавляем единицу в счётчик названия(obj[el])
obj[el] %= 2;
obj[el] || count++;


если счётчик названия делится на два, увеличиваем общий счётчик.
почти тоже что
if(obj[el] %= 2 == 0) count++;
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2022, 11:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от рони
obj[el] = (obj[el]||0)+1;
тоже самое
Сообщение от NovichokJS
tmp[item] = ++tmp[item] || 1;
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2022, 12:09
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
obj[el] = (obj[el]||0)+1;

если название(el) встретилось добавляем единицу в счётчик названия(obj[el])
obj[el] %= 2;
obj[el] || count++;


если счётчик названия делится на два, увеличиваем общий счётчик.
почти тоже что
if(obj[el] %= 2 == 0) count++;
ок, но единственное еще это пока полностью не могу понять obj[el] = (obj[el]||0)+1;
Можно как-то по-другому это написать? возможно с if
Ответить с цитированием
  #10 (permalink)  
Старый 15.06.2022, 12:23
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

я кажется понял. Эта фраза obj[el] = (obj[el]||0)+1; тоже саме что и эта:
if (obj[el] !== undefined) { obj[el] += 1 } else { obj[el] = 1 }
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти количество эл.меньших ср.арифм.всех элементов и сортировка dakus Общие вопросы Javascript 7 06.06.2022 20:27
Найти количество повторений числа в массиве nikofedorov Общие вопросы Javascript 1 09.02.2020 22:18
Просмотрела исходик jQuery Откорректируйте где не верно taksebe jQuery 5 23.11.2018 22:42
Дано натуральное число n. Найти количество его делителей, что кратные 3. Ирина99 Общие вопросы Javascript 13 15.11.2017 16:01
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26