현재 다음과 같은 배열이 있습니다.
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
기타
현재 다음과 같은 배열이 있습니다.
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
기타
{}함수형 프로그래밍이 아닌 에서 와 같은 맵을 의미한다고 가정합니다 map.
답변:
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();
작업을 수행하기 위해 고차 함수를 사용할 수도 있습니다. 이 답변보기
for (var i = 0; i <= array_elements.length; i++) {또는을 <=사용하십시오 <.
var counts = {};
your_array.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
counts[x] || 0값을 반환하고 counts[x]그렇지 않으면 값을 반환합니다 0. 그런 다음 하나를 추가하고 개체에 다시 설정하면 계산이 완료됩니다.
reduce:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
이 같은:
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 루프를 사용하십시오.
uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
이 (아주 오래된) 질문을 우연히 발견했습니다. 흥미롭게도 가장 명확하고 우아한 솔루션 (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));
나는 이것이 배열에서 동일한 값으로 발생을 계산하는 가장 간단한 방법이라고 생각합니다.
var a = [true, false, false, false];
a.filter(function(value){
return value === false;
}).length
// Initial array
let array = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h', 'h', 'h', 'e', 'a'];
// Unique array without duplicates ['a', 'b', ... , 'h']
let unique = [...new Set(array)];
// This array counts duplicates [['a', 3], ['b', 2], ... , ['h', 3]]
let duplicates = unique.map(value => [value, array.filter(str => str === value).length]);
응답하는 사람 Map()은 이것에 대해 내장을 사용하지 않는 것 같습니다 Array.prototype.reduce().
const data = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
const result = data.reduce((a, c) => a.set(c, (a.get(c) || 0) + 1), new Map());
console.log(...result);
Nb, 이전 브라우저에서 사용 하려면 polyfill을Map() 해야합니다.
get, set함수는 Map객체 에서 나옵니다 . 그러나 초기 누산기는 Map 객체가 아니므로 축소 기의 축소 버전이 하나를 사용하는 이유는 무엇입니까?
Map개체입니다. 감소의 두 번째 인수를 참조하십시오. Map.prototype.set지도 객체를 반환하고 제공된 키의 값을 Map.prototype.get반환 undefined합니다. 이를 통해 각 문자의 현재 개수 (또는 0정의되지 않은 경우)를 얻은 다음 1 씩 증가시킨 다음 해당 문자의 개수를 새 개수로 설정하여 맵을 반환하고 새 누산기 값이됩니다.
개수가 포함 된 개체를 가질 수 있습니다. 목록을 살펴보고 각 요소의 개수를 늘립니다.
var counts = {};
uniqueCount.forEach(function(element) {
counts[element] = (counts[element] || 0) + 1;
});
for (var element in counts) {
console.log(element + ' = ' + counts[element]);
}
counts[element] || 0무엇입니까?
counts[element]반환 undefined됩니다. 그런 다음 추가하려고하면 undefined + 1, 당신은 될 겁니다 NaN가 . 는 (count[element] || 0)를 대체 undefined하여 0추가 그래서 1생산 1대신 NaN. ECMAScript 2020 ??은 유사한 작업을 수행하지만 첫 번째 값이 undefined(또는 null) 일 때 두 번째 값을 사용한다는 것이 조금 더 명시적인 nullish 병합 연산자 를 추가합니다 . 해당 버전은 (counts[element] ?? 0) + 1.
var uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
// here we will collect only unique items from the array
var uniqueChars = [];
// iterate through each item of uniqueCount
for (i of uniqueCount) {
// if this is an item that was not earlier in uniqueCount,
// put it into the uniqueChars array
if (uniqueChars.indexOf(i) == -1) {
uniqueChars.push(i);
}
}
// after iterating through all uniqueCount take each item in uniqueChars
// and compare it with each item in uniqueCount. If this uniqueChars item
// corresponds to an item in uniqueCount, increase letterAccumulator by one.
for (x of uniqueChars) {
let letterAccumulator = 0;
for (i of uniqueCount) {
if (i == x) {letterAccumulator++;}
}
console.log(`${x} = ${letterAccumulator}`);
}
알파벳을 포함하는 배열에서 중복 :
var arr = ["a", "b", "a", "z", "e", "a", "b", "f", "d", "f"],
sortedArr = [],
count = 1;
sortedArr = arr.sort();
for (var i = 0; i < sortedArr.length; i = i + count) {
count = 1;
for (var j = i + 1; j < sortedArr.length; j++) {
if (sortedArr[i] === sortedArr[j])
count++;
}
document.write(sortedArr[i] + " = " + count + "<br>");
}
숫자를 포함하는 배열에서 중복 :
var arr = [2, 1, 3, 2, 8, 9, 1, 3, 1, 1, 1, 2, 24, 25, 67, 10, 54, 2, 1, 9, 8, 1],
sortedArr = [],
count = 1;
sortedArr = arr.sort(function(a, b) {
return a - b
});
for (var i = 0; i < sortedArr.length; i = i + count) {
count = 1;
for (var j = i + 1; j < sortedArr.length; j++) {
if (sortedArr[i] === sortedArr[j])
count++;
}
document.write(sortedArr[i] + " = " + count + "<br>");
}
var testArray = [ 'a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h ','h ','h ','e ','a '];
var newArr = [];
testArray.forEach((item) => {
newArr[item] = testArray.filter((el) => {
return el === item;
}).length;
})
console.log(newArr);
좋은 답변의 조합 :
var count = {};
var arr = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h', 'h', 'h', 'e', 'a'];
var iterator = function (element) {
count[element] = (count[element] || 0) + 1;
}
if (arr.forEach) {
arr.forEach(function (element) {
iterator(element);
});
} else {
for (var i = 0; i < arr.length; i++) {
iterator(arr[i]);
}
}
도움이 되었기를 바랍니다.
public class CalculateCount {
public static void main(String[] args) {
int a[] = {1,2,1,1,5,4,3,2,2,1,4,4,5,3,4,5,4};
Arrays.sort(a);
int count=1;
int i;
for(i=0;i<a.length-1;i++){
if(a[i]!=a[i+1]){
System.out.println("The Number "+a[i]+" appears "+count+" times");
count=1;
}
else{
count++;
}
}
System.out.println("The Number "+a[i]+" appears "+count+" times");
}
}
array.map을 사용하여 루프를 줄일 수 있습니다. jsfiddle 에서 참조하십시오.
function Check(){
var arr = Array.prototype.slice.call(arguments);
var result = [];
for(i=0; i< arr.length; i++){
var duplicate = 0;
var val = arr[i];
arr.map(function(x){
if(val === x) duplicate++;
})
result.push(duplicate>= 2);
}
return result;
}
테스트하려면 :
var test = new Check(1,2,1,4,1);
console.log(test);
var string = ['a','a','b','c','c','c','c','c','a','a','a'];
function stringCompress(string){
var obj = {},str = "";
string.forEach(function(i) {
obj[i] = (obj[i]||0) + 1;
});
for(var key in obj){
str += (key+obj[key]);
}
console.log(obj);
console.log(str);
}stringCompress(string)
/*
Always open to improvement ,please share
*/
예를 들어 파일을 demo.js만들고 노드를 사용하여 콘솔에서 실행하면 demo.js행렬 형태로 요소가 발생합니다.
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);
다음과 같이 콘솔에 결과가 표시됩니다.
[ 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 ] ]
가장 빠른 방법 :
Сomputational 복잡도 는 O (n)입니다.
function howMuchIsRepeated_es5(arr) {
const count = {};
for (let i = 0; i < arr.length; i++) {
const val = arr[i];
if (val in count) {
count[val] = count[val] + 1;
} else {
count[val] = 1;
}
}
for (let key in count) {
console.log("Value " + key + " is repeated " + count[key] + " times");
}
}
howMuchIsRepeated_es5(['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a']);
가장 짧은 코드 :
ES6를 사용하십시오.
function howMuchIsRepeated_es6(arr) {
// count is [ [valX, count], [valY, count], [valZ, count]... ];
const count = [...new Set(arr)].map(val => [val, arr.join("").split(val).length - 1]);
for (let i = 0; i < count.length; i++) {
console.log(`Value ${count[i][0]} is repeated ${count[i][1]} times`);
}
}
howMuchIsRepeated_es6(['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a']);
var arr = ['a','d','r','a','a','f','d'];
//call function and pass your array, function will return an object with array values as keys and their count as the key values.
duplicatesArr(arr);
function duplicatesArr(arr){
var obj = {}
for(var i = 0; i < arr.length; i++){
obj[arr[i]] = [];
for(var x = 0; x < arr.length; x++){
(arr[i] == arr[x]) ? obj[arr[i]].push(x) : '';
}
obj[arr[i]] = obj[arr[i]].length;
}
console.log(obj);
return obj;
}
arr고유 세트를 키로 보유 할 오브젝트 를 선언하십시오 . arrmap을 사용하여 배열을 한 번 반복하여 채 웁니다 . 키가 이전에 발견되지 않은 경우 키를 추가하고 0 값을 지정하십시오. 반복 할 때마다 키의 값이 증가합니다.
주어진 testArray :
var testArray = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
해결책:
var arr = {};
testArray.map(x=>{ if(typeof(arr[x])=="undefined") arr[x]=0; arr[x]++;});
JSON.stringify(arr) 출력됩니다
{"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}
Object.keys(arr) 돌아올 것이다 ["a","b","c","d","e","f","g","h"]
항목의 발생을 찾으려면 예를 들어 b arr['b']가 출력됩니다.2
용법:
wrap.common.getUniqueDataCount(, columnName);
암호:
function getUniqueDataCount(objArr, propName) {
var data = [];
objArr.forEach(function (d, index) {
if (d[propName]) {
data.push(d[propName]);
}
});
var uniqueList = [...new Set(data)];
var dataSet = {};
for (var i=0; i < uniqueList.length; i++) {
dataSet[uniqueList[i]] = data.filter(x => x == uniqueList[i]).length;
}
return dataSet;
}
단편
var data= [
{a:'you',b:'b',c:'c',d:'c'},
{a: 'you', b: 'b', c: 'c', d:'c'},
{a: 'them', b: 'b', c: 'c', d:'c'},
{a: 'them', b: 'b', c: 'c', d:'c'},
{a: 'okay', b: 'b', c: 'c', d:'c'},
{a: 'okay', b: 'b', c: 'c', d:'c'},
];
console.log(getUniqueDataCount(data, 'a'));
function getUniqueDataCount(objArr, propName) {
var data = [];
objArr.forEach(function (d, index) {
if (d[propName]) {
data.push(d[propName]);
}
});
var uniqueList = [...new Set(data)];
var dataSet = {};
for (var i=0; i < uniqueList.length; i++) {
dataSet[uniqueList[i]] = data.filter(x => x == uniqueList[i]).length;
}
return dataSet;
}