1

I wanted to know is it possible to use the reduce method on arrays with strings as well?

For ex: If I have an array like this: [ 'm', 'o', 'o', 'n' ] then I can reduce it to an object like this: { m: 1, o: 2, n: 1 }, that counts the occurrences of all characters in the string.
But if instead I had a string "moon" I wouldn't be able to use the reduce method with it.

I know I can write a custom implementation for reduce, but is there something simpler?

1 Answer 1

4

Yes, since Array.prototype.reduce is a generic method, it doesn't require it's this value to necessarily be an array. Meaning reduce is designed not only to work with arrays but to also work with other array-like values like strings.

And in order to use reduce with the string str, you can invoke it on the string by using Function.prototype.call.

const str = "moon";
const strCharCount = Array.prototype.reduce.call(
  str,
  (r, s) => {
    r[s] = (r[s] ?? 0) + 1;
    return r;
  },
  {}
);

console.log(strCharCount);

And if all of that didn't make any sense, you can also transform the string to an array and use reduce as you normally would.

const str = "moon";
const strCharCount = Array.from(str).reduce((r, s) => {
  r[s] = (r[s] ?? 0) + 1;
  return r;
}, {});

console.log(strCharCount);

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.