I need to count the characters from a to z in an array.
For example I have an array like this:
["max","mona"]
The desired result would be something like this:
a=2, m=2, n=1, o=1, x=1
You can use two forEach loops and return object
var ar = ["max", "mona"], o = {}
ar.forEach(function(w) {
w.split('').forEach(function(e) {
return o[e] = (o[e] || 0) + 1;
});
});
console.log(o)
Or with ES6 you can use arrow function
var ar = ["max","mona"], o = {}
ar.forEach(w => w.split('').forEach(e => o[e] = (o[e] || 0)+1));
console.log(o)
As @Alex.S suggested you can first use join() to return string, then split() to return array and then you can also use reduce() and return object.
var ar = ["max", "mona"];
var result = ar.join('').split('').reduce(function(o, e) {
return o[e] = (o[e] || 0) + 1, o
}, {});
console.log(result)
return isn't needed in the first one. forEach doesn't do anything with what is returned.join to avoid outer forEach. Like: ar.join().split('').forEach()You can use just one forEach loop and return object
var ar = [ "bonjour", "coucou"], map = {};
ar.join("").split("").forEach(e => map[e] = (map[e] || 0)+1);
console.log(map);
Live Demo
The solution using Array.join, Array.sort and String.split functions:
var arr = ["max","mona"],
counts = {};
arr = arr.join("").split(""); // transforms the initial array into array of single characters
arr.sort();
arr.forEach((v) => (counts[v] = (counts[v])? ++counts[v] : 1));
console.log(counts); // {a: 2, m: 2, n: 1, o: 1, x: 1}
[javascript] count characters)