Есть массив: [1, 3, 4, 1, 1, 3, 4, 5]
.
Числа могут быть различные. Мне нужно посчитать количество повторений каждого числа. То есть, например, для вышеуказанного массива:
число 1 == 3 раза
число 3 == 2 раза
число 4 == 2 раза
число 5 == 1 раз
Regent
19.1k6 золотых знаков29 серебряных знаков44 бронзовых знака
задан 12 июл 2016 в 11:09
2
Можно воспользоваться методом reduce
document.write('<pre>', JSON.stringify(
[1, 3, 4, 1, 1, 3, 4, 5].reduce((acc, el) => {
acc[el] = (acc[el] || 0) + 1;
return acc;
}, {}), null, 2), '</pre>');
Вариант без стрелочных функций
var result = [1, 3, 4, 1, 1, 3, 4, 5].reduce(function(acc, el) {
acc[el] = (acc[el] || 0) + 1;
return acc;
}, {});
document.write('<pre>', JSON.stringify(
result, null, 2), '</pre>');
ответ дан 12 июл 2016 в 11:15
Grundy♦Grundy
79.8k9 золотых знаков76 серебряных знаков133 бронзовых знака
2
Самое простое решение:
var arr = [1, 3, 4, 1, 1, 3, 4, 5];
var result = {};
for (var i = 0; i < arr.length; ++i)
{
var a = arr[i];
if (result[a] != undefined)
++result[a];
else
result[a] = 1;
}
for (var key in result)
document.write('число ' + key + ' == ' + result[key] + ' раз(а) <br>');
Можно использовать метод forEach
для массивов:
var arr = [1, 3, 4, 1, 1, 3, 4, 5];
var result = {};
arr.forEach(function(a){
if (result[a] != undefined)
++result[a];
else
result[a] = 1;
});
for (var key in result)
document.write('число ' + key + ' == ' + result[key] + ' раз(а) <br>');
Применив небольшую хитрость, можно записать ещё короче:
var arr = [1, 3, 4, 1, 1, 3, 4, 5];
var result = {};
arr.forEach(function(a){
result[a] = result[a] + 1 || 1;
});
for (var key in result)
document.write('число ' + key + ' == ' + result[key] + ' раз(а) <br>');
ответ дан 12 июл 2016 в 12:07
Эффективный алгоритм: сортируем числа, проходим по массиву, считаем повторения. В отличии от тупого перебора(прошлись по каждому числу и посчитали его количество) который работает за O(N^2) такой алгоритм работает за O(N log N). Хотя автору темы вряд-ли нужен эффективный алгоритм, но кому-то может пригодиться.
ответ дан 8 ноя 2017 в 15:18
moskalenco_amoskalenco_a
9185 серебряных знаков19 бронзовых знаков
const result = arr.reduce((acc, rec, index) => {
return (typeof acc[rec] !== 'undefined')
? { ...acc, [rec]: acc[rec] + 1 }
: { ...acc, [rec]: 1 }
}, {})
Grundy♦
79.8k9 золотых знаков76 серебряных знаков133 бронзовых знака
ответ дан 6 апр 2020 в 12:11
2
Самый простой и верный вариант использовать метод .filter
[1,2,3,4,4,4,5,4,1,5,4].filter(item => item === 4).length // 5
ответ дан 8 ноя 2017 в 15:07
код по “эффективному алгоритму”, который описан выше:
function duplicateCount(text){
let str = text.toLowerCase().split("").sort();
let resultArr = [];
let k = 1;
for (let i of str){
if (i == str[k]){
if (!resultArr.includes(i)){
resultArr.push(i);
}
}
k++;
}
return resultArr.length
};
ответ дан 21 сен 2021 в 13:06
1
Вариант, проще всех перечисленных выше:
let arr = [1, 3, 4, 1, 1, 3, 4, 5];
let count = {};
for (let elem of arr) {
if (count[elem] === undefined) {
count[elem] = 1;
} else {
count[elem]++;
}
}
console.log(count); // выведет {1: 3, 3: 2, 4: 2, 5: 1}
ответ дан 10 мая 2022 в 6:27
Как найти количество повторяющихся элементов массива?
Дан массив [ ‘-………’, ‘…..’, ‘-….-‘, ‘…..’ ] необходимо произвести подсчет элементов-дубликатов.
Как реализовать?
-
Вопрос заданболее трёх лет назад
-
10370 просмотров
const count = arr.reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {});
const duplicateCount = Object.values(count).filter(n => n > 1).length;
function arrayCountValues (arr) {
var v, freqs = {};
for (var i = arr.length; i--; ) {
v = arr[i];
if (freqs[v]) freqs[v] += 1;
else freqs[v] = 1;
}
return freqs;
}
Пригласить эксперта
const arrayOfDuplicateElements = [ '-.........', '.....', '-....-', '.....' ]
const getNumberOfDuplicateItems = arr => {
const set = new Set()
arr.forEach(el => set.add(el))
const initialArrayLength = arr.length
const uniqueArrayLength = [...set].length
return initialArrayLength - uniqueArrayLength
}
console.log(getNumberOfDuplicateItems(arrayOfDuplicateElements))
or
const arrayOfDuplicateElements = [ '-.........', '.....', '-....-', '.....' ]
const getNumberOfDuplicateItems = arr => arr.length - [...new Set(arr)].length
console.log(getNumberOfDuplicateItems(arrayOfDuplicateElements))
-
Показать ещё
Загружается…
18 мая 2023, в 06:33
500 руб./за проект
18 мая 2023, в 04:47
1000 руб./в час
18 мая 2023, в 04:36
5000 руб./за проект
Минуточку внимания
8 / 8 / 4 Регистрация: 05.10.2010 Сообщений: 137 |
|
1 |
|
Найти количество повторов в массиве18.10.2010, 17:22. Показов 8701. Ответов 10
Как найти количиство повторов в массиве длиной вводимой с клавы? О_о
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
18.10.2010, 17:22 |
10 |
5054 / 3115 / 271 Регистрация: 11.11.2009 Сообщений: 7,045 |
|
18.10.2010, 17:25 |
2 |
Если удручает размер массива, вводимый с клавиатуры, то динамическое распределение памяти вам в помосчь.
0 |
Mr.X 3222 / 1749 / 435 Регистрация: 03.05.2010 Сообщений: 3,867 |
||||
18.10.2010, 17:52 |
3 |
|||
1 |
8 / 8 / 4 Регистрация: 05.10.2010 Сообщений: 137 |
|
18.10.2010, 21:37 [ТС] |
4 |
Спасибо! А можно попроще а то мы учим С++ месяц и меня за это… =) Добавлено через 3 минуты
0 |
MILAN 899 / 793 / 186 Регистрация: 21.02.2009 Сообщений: 1,722 |
||||
18.10.2010, 22:13 |
5 |
|||
1 |
Mr.X 3222 / 1749 / 435 Регистрация: 03.05.2010 Сообщений: 3,867 |
||||
18.10.2010, 22:40 |
6 |
|||
0 |
egorikem 8 / 8 / 4 Регистрация: 05.10.2010 Сообщений: 137 |
||||
19.10.2010, 19:15 [ТС] |
7 |
|||
А можно чтоб вводил элементы массива сам человек!!!!
0 |
MILAN 899 / 793 / 186 Регистрация: 21.02.2009 Сообщений: 1,722 |
||||
19.10.2010, 19:30 |
8 |
|||
Да, конечно:
0 |
8 / 8 / 4 Регистрация: 05.10.2010 Сообщений: 137 |
|
23.10.2010, 12:30 [ТС] |
9 |
MILAN, А можно чтоб в конце выводилась одна строка и только с повтором а не все элементы???
0 |
MILAN 899 / 793 / 186 Регистрация: 21.02.2009 Сообщений: 1,722 |
||||
23.10.2010, 12:40 |
10 |
|||
Так пойдет?
0 |
8 / 8 / 4 Регистрация: 05.10.2010 Сообщений: 137 |
|
23.10.2010, 13:36 [ТС] |
11 |
Слых у тебя так сказать ошибка! Надо его сначала отсортировать!!!!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.10.2010, 13:36 |
11 |
Create a file for example demo.js
and run it in console with node demo.js
and you will get occurrence of elements in the form of matrix.
var multipleDuplicateArr = Array(10).fill(0).map(()=>{return Math.floor(Math.random() * Math.floor(9))});
console.log(multipleDuplicateArr);
var resultArr = Array(Array('KEYS','OCCURRENCE'));
for (var i = 0; i < multipleDuplicateArr.length; i++) {
var flag = true;
for (var j = 0; j < resultArr.length; j++) {
if(resultArr[j][0] == multipleDuplicateArr[i]){
resultArr[j][1] = resultArr[j][1] + 1;
flag = false;
}
}
if(flag){
resultArr.push(Array(multipleDuplicateArr[i],1));
}
}
console.log(resultArr);
You will get result in console as below:
[ 1, 4, 5, 2, 6, 8, 7, 5, 0, 5 ] . // multipleDuplicateArr
[ [ 'KEYS', 'OCCURENCE' ], // resultArr
[ 1, 1 ],
[ 4, 1 ],
[ 5, 3 ],
[ 2, 1 ],
[ 6, 1 ],
[ 8, 1 ],
[ 7, 1 ],
[ 0, 1 ] ]
Для поиска одинаковых элементов в массиве нагляднее всего воспользоваться циклом:
const nums = [1, 2, 1, 4, 5, 1, 7, 8, 1, 10];
let count = 0;
for (let i = 0; i < nums.length; i +=1 ) {
if (nums[i] === 1) {
count += 1;
}
}
// Вывод: 4
Или например, необходимо посчитать сколько раз встречается каждая цифра в исходном массиве, с помощью reduce:
const nums = [1, 2, 7, 4, 5, 2, 7, 8, 1, 10];
const res = nums.reduce((acc, i) => {
if (acc.hasOwnProperty(i)) {
acc[i] += 1;
} else {
acc[i] = 1;
}
return acc;
},{})
// Вывод: { '1': 2, '2': 2, '4': 1, '5': 1, '7': 2, '8': 1, '10': 1 }