Saat ini, saya mendapatkan array seperti itu:
var uniqueCount = Array();
Setelah beberapa langkah, array saya terlihat seperti itu:
uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];
Bagaimana saya bisa menghitung berapa banyak a, b, c yang ada dalam array? Saya ingin mendapatkan hasil seperti:
a = 3
b = 1
c = 2
d = 2
dll.
javascript
arrays
detno29
sumber
sumber
{}
, bukan pemrograman fungsionalmap
.Jawaban:
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();
Biola Demo
Anda juga dapat menggunakan fungsi tingkat tinggi untuk melakukan operasi. Lihat jawaban ini
sumber
for (var i = 0; i <= array_elements.length; i++) {
atau<=
sebagai gantinya<
.var counts = {}; your_array.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
sumber
counts[x] || 0
mengembalikan nilaicounts[x]
jika disetel, sebaliknya0
. Kemudian tambahkan satu dan atur lagi di objek dan hitungan selesai.reduce
:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
Sesuatu seperti ini:
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);
Gunakan loop for yang sederhana, bukan forEach jika Anda tidak ingin ini rusak di browser lama.
sumber
uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
Saya menemukan pertanyaan (sangat tua) ini. Menariknya solusi yang paling jelas dan elegan (imho) tidak ada: Array.prototype.reduce (...) . Semua browser utama mendukung fitur ini sejak sekitar 2011 (IE) atau bahkan lebih awal (semua yang lain):
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}
sumber
Garis tunggal berdasarkan fungsi pengurangan array
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));
sumber
Sederhana lebih baik, satu variabel, satu fungsi :)
const counts = arr.reduce((acc, value) => ({ ...acc, [value]: (acc[value] || 0) + 1 }), {});
sumber
Saya pikir ini adalah cara termudah untuk menghitung kejadian dengan nilai yang sama dalam array.
var a = [true, false, false, false]; a.filter(function(value){ return value === false; }).length
sumber
Tidak ada yang menanggapi tampaknya menggunakan
Map()
built-in untuk ini, yang cenderung menjadi tujuan saya dikombinasikan denganArray.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, Anda harus melakukan polyfill
Map()
jika ingin menggunakannya di browser lama.sumber
get
danset
fungsi berasal dariMap
objek. Tetapi akumulator awal bukanlah objek Map, jadi mengapa versi reducer membutuhkannya?Map
objek baru ; lihat argumen kedua dari pengurangan.Map.prototype.set
mengembalikan objek peta, danMap.prototype.get
mengembalikanundefined
atau nilai kunci apa pun yang diberikan padanya. Ini memungkinkan kita mendapatkan jumlah saat ini untuk setiap huruf (atau0
jika tidak ditentukan), lalu menambahnya satu per satu, lalu menyetel jumlah huruf itu ke hitungan baru, yang mengembalikan peta dan menjadi nilai akumulator baru.// 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]);
sumber
Anda dapat memiliki objek yang berisi hitungan. Telusuri daftar dan tambah jumlah untuk setiap elemen:
var counts = {}; uniqueCount.forEach(function(element) { counts[element] = (counts[element] || 0) + 1; }); for (var element in counts) { console.log(element + ' = ' + counts[element]); }
sumber
counts[element] || 0
?counts[element]
pengembalianundefined
karena properti belum memiliki nilai. Jika Anda kemudian mencoba menambahkanundefined + 1
, Anda akan mendapatkan NaN . Ini(count[element] || 0)
akan menggantikanundefined
dengan0
jadi menambahkan1
menghasilkan1
bukanNaN
. ECMAScript 2020 menambahkan operator penggabungan nullish??
yang melakukan hal serupa tetapi sedikit lebih eksplisit bahwa ia menggunakan nilai kedua ketika yang pertama adalahundefined
(ataunull
). Versi itu akan menjadi(counts[element] ?? 0) + 1
.Anda dapat menyelesaikannya tanpa menggunakan for / while loop ou forEach.
function myCounter(inputWords) { return inputWords.reduce( (countWords, word) => { countWords[word] = ++countWords[word] || 1; return countWords; }, {}); }
Semoga membantu Anda!
sumber
// new example. var str= [20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5]; function findOdd(para) { var count = {}; para.forEach(function(para) { count[para] = (count[para] || 0) + 1; }); return count; } console.log(findOdd(str));
sumber
Anda bisa melakukan sesuatu seperti itu:
uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a']; var map = new Object(); for(var i = 0; i < uniqueCount.length; i++) { if(map[uniqueCount[i]] != null) { map[uniqueCount[i]] += 1; } else { map[uniqueCount[i]] = 1; } }
sekarang Anda memiliki peta dengan semua karakter dihitung
sumber
Sederhana dalam javascript menggunakan metode pengurangan array:
const arr = ['a','d','r','a','a','f','d']; const result = arr.reduce((json,val)=>({...json, [val]:(json[val] | 0) + 1}),{}); console.log(result) //{ a:3,d:2,r:1,f:1 }
sumber
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}`); }
sumber
Duplikat dalam larik yang berisi huruf:
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>"); }
Duplikat dalam larik yang berisi angka:
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>"); }
sumber
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);
sumber
uniqueCount = ["a","b","a","c","b","a","d","b","c","f","g","h","h","h","e","a"]; var count = {}; uniqueCount.forEach((i) => { count[i] = ++count[i]|| 1}); console.log(count);
sumber
sheet.js answare yang disederhanakan
var counts = {}; var aarr=['a','b','a']; aarr.forEach(x=>counts[x]=(counts[x] || 0)+1 ); console.log(counts)
sumber
Kombinasi jawaban yang bagus:
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]); } }
Semoga bermanfaat.
sumber
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"); }
}
sumber
Dengan menggunakan array.map kita dapat mengurangi loop, lihat ini di 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; }
Untuk mengetes:
var test = new Check(1,2,1,4,1); console.log(test);
sumber
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 */
sumber
Buat file misalnya
demo.js
dan jalankan di konsol dengan nodedemo.js
dan Anda akan mendapatkan kemunculan elemen dalam bentuk matriks.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);
Anda akan mendapatkan hasil di konsol seperti di bawah ini:
[ 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 ] ]
sumber
Cara tercepat:
Kompleksitas komputasi adalah 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']);
Kode terpendek:
Gunakan 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']);
sumber
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; }
sumber
Deklarasikan sebuah objek
arr
untuk menampung set unik sebagai kunci. Mengisiarr
dengan melakukan perulangan melalui larik sekali menggunakan map. Jika kunci belum ditemukan sebelumnya, tambahkan kunci dan tetapkan nilai nol. Pada setiap kenaikan iterasi nilai kunci.Diberikan testArray:
var testArray = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
larutan:
var arr = {}; testArray.map(x=>{ if(typeof(arr[x])=="undefined") arr[x]=0; arr[x]++;});
JSON.stringify(arr)
akan mengeluarkan{"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}
Object.keys(arr)
akan kembali["a","b","c","d","e","f","g","h"]
Untuk menemukan kemunculan item apapun misalnya b
arr['b']
akan mengeluarkan2
sumber
Pemakaian:
KODE:
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; }
Potongan
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; }
sumber