Найти количество одинаковых пар в массиве
Помогите пожалуйста поправить в коде так, чтобы всё отработало. Вот мой код:
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, время: 01:16. |