[javascript] 자바 스크립트에서 배열의 중복 값을 계산하는 방법

현재 다음과 같은 배열이 있습니다.

var uniqueCount = Array();

몇 단계를 거치면 배열이 다음과 같이 보입니다.

uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];

어레이에 얼마나 많은 a, b, c가 있는지 어떻게 셀 수 있습니까? 다음과 같은 결과를 원합니다.

a = 3
b = 1
c = 2
d = 2

기타



답변

function count() {
    array_elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];

    array_elements.sort();

    var current = null;
    var cnt = 0;
    for (var i = 0; i < array_elements.length; i++) {
        if (array_elements[i] != current) {
            if (cnt > 0) {
                document.write(current + ' comes --> ' + cnt + ' times<br>');
            }
            current = array_elements[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    if (cnt > 0) {
        document.write(current + ' comes --> ' + cnt + ' times');
    }

}

count();

데모 바이올린

작업을 수행하기 위해 고차 함수를 사용할 수도 있습니다. 이 답변보기


답변

var counts = {};
your_array.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });


답변

이 같은:

uniqueCount = ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"];
var count = {};
uniqueCount.forEach(function(i) { count[i] = (count[i]||0) + 1;});
console.log(count);

이전 브라우저에서 이것이 중단되는 것을 원하지 않으면 forEach 대신 간단한 for 루프를 사용하십시오.


답변

이 (아주 오래된) 질문을 우연히 발견했습니다. 흥미롭게도 가장 명확하고 우아한 솔루션 (imho)이 누락되었습니다 : Array.prototype.reduce (…) . 모든 주요 브라우저는 2011 년 (IE) 또는 그 이전 (기타 모든 브라우저) 이후이 기능을 지원합니다.

var arr = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = arr.reduce(function(prev, cur) {
  prev[cur] = (prev[cur] || 0) + 1;
  return prev;
}, {});

// map is an associative array mapping the elements to their frequency:
document.write(JSON.stringify(map));
// prints {"a": 3, "b": 2, "c": 2, "d": 2, "e": 2, "f": 1, "g": 1, "h": 3}


답변

배열 감소 기능을 기반으로 한 한 줄

const uniqueCount =  ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const distribution = uniqueCount.reduce((acum,cur) => Object.assign(acum,{[cur]: (acum[cur] | 0)+1}),{});
console.log(JSON.stringify(distribution,null,2));


답변

단순한 것이 더 낫습니다, 하나의 변수, 하나의 기능 🙂

const counts = arr.reduce((acc, value) => ({
   ...acc,
   [value]: (acc[value] || 0) + 1
}), {});


답변

나는 이것이 배열에서 동일한 값으로 발생을 계산하는 가장 간단한 방법이라고 생각합니다.

var a = [true, false, false, false];
a.filter(function(value){
    return value === false;
}).length