简体   繁体   中英

Is it possible to use reduce with strings in JavaScript?

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?

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM