Найти количество одинаковых пар в массиве
Помогите пожалуйста поправить в коде так, чтобы всё отработало. Вот мой код:
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. |
NovichokJS,
что такое пара? |
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 |
Цитата:
у нас 3 одинаковых пары, поэтому должно вернуть количество равное 3. |
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); } :dance: |
Цитата:
|
Цитата:
obj[el] = (obj[el]||0)+1; если название(el) встретилось добавляем единицу в счётчик названия(obj[el]) obj[el] %= 2; obj[el] || count++; если счётчик названия делится на два, увеличиваем общий счётчик. почти тоже что if(obj[el] %= 2 == 0) count++; |
Цитата:
Цитата:
|
Цитата:
Можно как-то по-другому это написать? возможно с if |
я кажется понял. Эта фраза obj[el] = (obj[el]||0)+1; тоже саме что и эта:
if (obj[el] !== undefined) { obj[el] += 1 } else { obj[el] = 1 } |
Часовой пояс GMT +3, время: 15:00. |