简体   繁体   中英

Can I add forEach method to String prototype from Array prototype?

As we know there is a .forEach() method for arrays in JavaScript. But Strings don't have that method built in.

So, is there any issue regarding the following code snippet: String.prototype.forEach = Array.prototype.forEach ?

This setting helps me to use .forEach for Strings.

let myName = "Avetik";   

String.prototype.forEach = Array.prototype.forEach;

myName.forEach(char => {

console.log(char);
})

The above code works fine and outputs all chars of my name.

You already guessed that I am a newbie in JS.

.forEach() is inherently a function for arrays (groups of multiple things). A string is just 1 thing, there's no way to do something for "each" when there's only 1.

You can use .split() on a string to turn it into an array of every character. Then do whatever array operations you want on the result of that. And then .join() on the array to turn it back into a string if you need to.

var myString = "beans";
var myArray = myString.split(); // this will be an array of 5 strings: ['b', 'e', 'a', 'n', 's']

You can , but:

  • it's confusing (other developers working on the same codebase could well be very confused at seing such a method called on a string)
  • can lead to fragile code (if you define String.prototype.forEach , it may interfere with other code that uses methods on the String prototype)
  • doesn't help much: you can do [...str].forEach very easily, and you can also do for (const char of str) { very easily

 // Say we want to iterate over this string: const str = 'str'; // without adding a method to the prototype. Easy: // One method: for (const char of str) { console.log(char); } // Another method: [...str].forEach((char) => { console.log(char); });

So, it's doable, but it's probably not a good idea.

you can add your own wrapper...

 if(typeof String.prototype.forEach !== "function") { String.prototype.forEach = Array.from(this).forEach }; // sample usage : let abc = 'abc' abc.forEach((letter, index)=> console.log(letter,index))

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