If I want to create an array from something other than an array, such as a string, or an object of a constructor other than that of Array there are a number of ways of doing so. For example when it comes to having a string of a bunch of numbers with each number separated by a comma I can use the String.split prototype method to create an array of substrings where each substring is one of the numbers. However in this post I am mainly going to be writing about the Array.from static method that will work okay with array like objects, however it will not always work out so great in other situations sometimes.
The array from method might work okay with array like objects, but even then it might not always work out the way I want it to deeding on what I am trying to do. For example when it comes to making a copy of an array, the array from method might work okay when it comes to making a shallow copy of an array, but not a deep one.
The array from static method can be called off of the Array global, and then an array like object can be passed as the first argument. As long as the object is formated like an array it should work okay, and what will be returned is an array with all the prototype methods of an array like the array map method.
So then that is it when it comes to array from however there are some draw backs with this though. For example if the aim is to use the array from method to make a copy of an array this method will only preform a shallow copy of it. Another draw back is that this method will only work with arrays, array like objects, and iterable objects, so it will not work with strings. So lets look at some additional options for creating an array from something other than an array.
There are two additional arguments that can be passed to the array from method. One of which is a map method that will be called for each element in the new array, and the other is to set the value of the this keyword in the map method.
The Object value static method will return an array of values for the object that is passed to it. So it is another way of creating an array from an object. What is great about this is that it will create arrays just fine with objects that have named key values without a length property.
The string split method comes in handy if there is a static separator between each item in a string that I want to become an element in an array. To use this method I just call the split string prototype method off of the string, and then pass what the separator is for each element as the first and only argument for the string split method. The returned result is then an array with each value as an element in the resulting array, however there might be just one thing to be aware of after that which is that they will all be string values. This can easily resolved though by just doing something to make sure the desired type is returned by running over the elements with the array map method for example.
The string match method is yet another option for creating a new array from a string, assuming that you have some knowledge of how to work with regular expressions. If not then they are with out question a topic to get into at some point sooner or later as they are a great way to preform all kinds of complex pattern matching tasks that might come up now and then.
Of course there is also the use of a for in loop as a way to go about creating an array with object key values, or the names for that matter. This is one of the tired yet true ways of going about doing this, it still works okay for some simple examples, but there are so many other ways of doing so now. Also this might not be the fastest way of doing this, I did not get around to researching or testing performance with these various options, but I am sure this might prove to be one of the slowest options. As such this is only what one should go for if for some reason you do not want your code to break on old platforms that a few nostalgia nerds might still use.
So in an above section I covered the Object values static method that can create an array from an object with named key names, but what if I want an array of key names rather than values. This is where the Object keys static method can come into play.
There is much more to cover when it comes to creating a new array from another array, or another object of one kind or another though, for example the array from method creates a shallow clone of an array, but what if I want a deep clone? When it comes to the topic of deep cloning an array there are a number of options when it comes to that sort of thing, and also it is something that comes up when working with objects in general actually. However getting into that would be a whole other post completely.