function test1(str) { let arr = str.toLowerCase().split(" "); let obj = {}; let len = arr.length; for (let i = 0; i < len; i++) { if (obj[arr[i]]) { obj[arr[i]] ++ } else if(obj[arr[i]] === " ") { obj[arr[i]] = 0; } else { obj[arr[i]] = 1; } } return obj; } let output = obectCount('ask a bunch try a BUNCH get a bunch'); console.log(output); // --> { ask: 1, a: 3, bunch: 3, try: 1, get: 1 };
I expect it to be { ask: 1, a: 3, bunch: 3, try: 1, get: 1 };
but it is wrong in various cases – how can I fix it?
Thank you for your interest. But there was a problem with the other conditions. its other condition , just updated..
let output1 = test1(' a b c d C b A ') console.log(output); // --> { a: 2, b: 2, c: 2, d: 1 } let output2 = test1(" ") console.log(output); // --> {}
Advertisement
Answer
So the idea basically is check if the object exist
- If yes increment the counter
- If no create a property and initialize its counter with 1
function objectCount(str) { let arr = str.toLowerCase().split(" "); let obj = {}; for (let i = 0; i < arr.length; i++) { if (Object.hasOwnProperty.call(obj, arr[i])){ obj[arr[i]]++; } else { obj[arr[i]] = 1; } } return obj; } let output = objectCount('ask a bunch try a BUNCH get a bunch'); console.log(output); // --> { ask: 1, a: 3, bunch: 3, try: 1, get: 1 };