Convert string parameter to an array of one element
I wrote a function which has to support two types of a paramter names
for a list of values. Internally it deals with the parameter as an array.
A single name is given as string and multiples names are given as an array of strings.
// simplified example
let doSome = names => names.map(name => name.toUpperCase())
names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function
I found a solution using Array.of()
in combination with flatten()
which needs some babel configuration.
doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());
Is there an idiomatic way in JavaScript to get an array without a type check?
javascript arrays string ecmascript-6
|
show 1 more comment
I wrote a function which has to support two types of a paramter names
for a list of values. Internally it deals with the parameter as an array.
A single name is given as string and multiples names are given as an array of strings.
// simplified example
let doSome = names => names.map(name => name.toUpperCase())
names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function
I found a solution using Array.of()
in combination with flatten()
which needs some babel configuration.
doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());
Is there an idiomatic way in JavaScript to get an array without a type check?
javascript arrays string ecmascript-6
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
6
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
1
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
1
Why can't you just(names instanceof Array ? names : [names]).map()
?
– Salman A
Jan 4 at 22:06
1
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to checktypeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.
– shiftweave
Jan 7 at 17:19
|
show 1 more comment
I wrote a function which has to support two types of a paramter names
for a list of values. Internally it deals with the parameter as an array.
A single name is given as string and multiples names are given as an array of strings.
// simplified example
let doSome = names => names.map(name => name.toUpperCase())
names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function
I found a solution using Array.of()
in combination with flatten()
which needs some babel configuration.
doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());
Is there an idiomatic way in JavaScript to get an array without a type check?
javascript arrays string ecmascript-6
I wrote a function which has to support two types of a paramter names
for a list of values. Internally it deals with the parameter as an array.
A single name is given as string and multiples names are given as an array of strings.
// simplified example
let doSome = names => names.map(name => name.toUpperCase())
names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function
I found a solution using Array.of()
in combination with flatten()
which needs some babel configuration.
doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());
Is there an idiomatic way in JavaScript to get an array without a type check?
javascript arrays string ecmascript-6
javascript arrays string ecmascript-6
edited Jan 5 at 6:23
4dc0
39539
39539
asked Jan 4 at 12:39
sschmecksschmeck
3,1811938
3,1811938
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
6
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
1
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
1
Why can't you just(names instanceof Array ? names : [names]).map()
?
– Salman A
Jan 4 at 22:06
1
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to checktypeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.
– shiftweave
Jan 7 at 17:19
|
show 1 more comment
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
6
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
1
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
1
Why can't you just(names instanceof Array ? names : [names]).map()
?
– Salman A
Jan 4 at 22:06
1
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to checktypeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.
– shiftweave
Jan 7 at 17:19
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
6
6
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
1
1
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
1
1
Why can't you just
(names instanceof Array ? names : [names]).map()
?– Salman A
Jan 4 at 22:06
Why can't you just
(names instanceof Array ? names : [names]).map()
?– Salman A
Jan 4 at 22:06
1
1
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to check
typeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.– shiftweave
Jan 7 at 17:19
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to check
typeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.– shiftweave
Jan 7 at 17:19
|
show 1 more comment
4 Answers
4
active
oldest
votes
You can use Array.concat()
, since concat accepts both arrays and non arrays:
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
2
The type check is now hidden away inArray.prototype.concat()
...
– Eric Duminil
Jan 4 at 19:12
add a comment |
You might not be able to implement it this way if you already have code depending on this function. Still, it would probably be cleaner to allow your function to accept a variable number of arguments with rest parameters.
It means you can call the function as names('Homer')
or names('Bart', 'Lisa')
:
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
If you really want to call the function with an array as argument, you can use the spread syntax :
console.log(names(...['Bart', 'Lisa'])); // [ "BART", "LISA" ]
If you use it with a string, you'll get back an array of characters, though:
console.log(names(...'Homer')); // [ "H", "O", "M", "E", "R" ]
add a comment |
Why not just check if the input is an array or not using isArray()?
I made another solution using this approach, also I put a control inside the map()
so this don't fail when the name
argument is null
or undefined
.
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
add a comment |
Maybe an maybe upcomming method of Array#flat
would help in this case (works actually only in Chrome and FF).
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaringArray.of
.
– Konrad Rudolph
Jan 4 at 19:13
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54039152%2fconvert-string-parameter-to-an-array-of-one-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use Array.concat()
, since concat accepts both arrays and non arrays:
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
2
The type check is now hidden away inArray.prototype.concat()
...
– Eric Duminil
Jan 4 at 19:12
add a comment |
You can use Array.concat()
, since concat accepts both arrays and non arrays:
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
2
The type check is now hidden away inArray.prototype.concat()
...
– Eric Duminil
Jan 4 at 19:12
add a comment |
You can use Array.concat()
, since concat accepts both arrays and non arrays:
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
You can use Array.concat()
, since concat accepts both arrays and non arrays:
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
const names = (v) => .concat(v).map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']
answered Jan 4 at 12:41


Ori DroriOri Drori
75.5k138092
75.5k138092
2
The type check is now hidden away inArray.prototype.concat()
...
– Eric Duminil
Jan 4 at 19:12
add a comment |
2
The type check is now hidden away inArray.prototype.concat()
...
– Eric Duminil
Jan 4 at 19:12
2
2
The type check is now hidden away in
Array.prototype.concat()
...– Eric Duminil
Jan 4 at 19:12
The type check is now hidden away in
Array.prototype.concat()
...– Eric Duminil
Jan 4 at 19:12
add a comment |
You might not be able to implement it this way if you already have code depending on this function. Still, it would probably be cleaner to allow your function to accept a variable number of arguments with rest parameters.
It means you can call the function as names('Homer')
or names('Bart', 'Lisa')
:
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
If you really want to call the function with an array as argument, you can use the spread syntax :
console.log(names(...['Bart', 'Lisa'])); // [ "BART", "LISA" ]
If you use it with a string, you'll get back an array of characters, though:
console.log(names(...'Homer')); // [ "H", "O", "M", "E", "R" ]
add a comment |
You might not be able to implement it this way if you already have code depending on this function. Still, it would probably be cleaner to allow your function to accept a variable number of arguments with rest parameters.
It means you can call the function as names('Homer')
or names('Bart', 'Lisa')
:
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
If you really want to call the function with an array as argument, you can use the spread syntax :
console.log(names(...['Bart', 'Lisa'])); // [ "BART", "LISA" ]
If you use it with a string, you'll get back an array of characters, though:
console.log(names(...'Homer')); // [ "H", "O", "M", "E", "R" ]
add a comment |
You might not be able to implement it this way if you already have code depending on this function. Still, it would probably be cleaner to allow your function to accept a variable number of arguments with rest parameters.
It means you can call the function as names('Homer')
or names('Bart', 'Lisa')
:
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
If you really want to call the function with an array as argument, you can use the spread syntax :
console.log(names(...['Bart', 'Lisa'])); // [ "BART", "LISA" ]
If you use it with a string, you'll get back an array of characters, though:
console.log(names(...'Homer')); // [ "H", "O", "M", "E", "R" ]
You might not be able to implement it this way if you already have code depending on this function. Still, it would probably be cleaner to allow your function to accept a variable number of arguments with rest parameters.
It means you can call the function as names('Homer')
or names('Bart', 'Lisa')
:
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
If you really want to call the function with an array as argument, you can use the spread syntax :
console.log(names(...['Bart', 'Lisa'])); // [ "BART", "LISA" ]
If you use it with a string, you'll get back an array of characters, though:
console.log(names(...'Homer')); // [ "H", "O", "M", "E", "R" ]
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
function names(...args){
return args.map(name => name.toUpperCase());
}
console.log(names('Bart', 'Lisa')); // [ 'BART', 'LISA' ]
console.log(names('Homer')); // ['HOMER']
answered Jan 4 at 19:22


Eric DuminilEric Duminil
39.5k53068
39.5k53068
add a comment |
add a comment |
Why not just check if the input is an array or not using isArray()?
I made another solution using this approach, also I put a control inside the map()
so this don't fail when the name
argument is null
or undefined
.
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
add a comment |
Why not just check if the input is an array or not using isArray()?
I made another solution using this approach, also I put a control inside the map()
so this don't fail when the name
argument is null
or undefined
.
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
add a comment |
Why not just check if the input is an array or not using isArray()?
I made another solution using this approach, also I put a control inside the map()
so this don't fail when the name
argument is null
or undefined
.
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
Why not just check if the input is an array or not using isArray()?
I made another solution using this approach, also I put a control inside the map()
so this don't fail when the name
argument is null
or undefined
.
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());
console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
answered Jan 8 at 3:50
ShiderszShidersz
4,8842629
4,8842629
add a comment |
add a comment |
Maybe an maybe upcomming method of Array#flat
would help in this case (works actually only in Chrome and FF).
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaringArray.of
.
– Konrad Rudolph
Jan 4 at 19:13
add a comment |
Maybe an maybe upcomming method of Array#flat
would help in this case (works actually only in Chrome and FF).
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaringArray.of
.
– Konrad Rudolph
Jan 4 at 19:13
add a comment |
Maybe an maybe upcomming method of Array#flat
would help in this case (works actually only in Chrome and FF).
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
Maybe an maybe upcomming method of Array#flat
would help in this case (works actually only in Chrome and FF).
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
const names = unknown => [unknown].flat().map(name => name.toUpperCase())
console.log(names(['Bart', 'Lisa']));
console.log(names('Homer'));
answered Jan 4 at 12:56


Nina ScholzNina Scholz
179k1491159
179k1491159
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaringArray.of
.
– Konrad Rudolph
Jan 4 at 19:13
add a comment |
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaringArray.of
.
– Konrad Rudolph
Jan 4 at 19:13
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
This answer is identical to the solution OP wants to improve, but using a different polyfill.
– shiftweave
Jan 4 at 16:35
1
1
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaring
Array.of
.– Konrad Rudolph
Jan 4 at 19:13
@shiftweave I see at least two differences: (1) it already works natively in some implementations; (2) it arguably improves the syntax of OP’s code by sugaring
Array.of
.– Konrad Rudolph
Jan 4 at 19:13
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54039152%2fconvert-string-parameter-to-an-array-of-one-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
Jan 4 at 13:03
6
Why don't you want to use a type-check? That would typically be the idiomatic and maintainable way to do this.
– shiftweave
Jan 4 at 17:11
1
@shiftweave +1. As the current responses show, the ways around this simply hide the type-check underneath another call and shift into the code-monkeying realm (or make it so that the method must be called with a variable number of parameters). The type check is the most idiomatic solution.
– Mike Hill
Jan 4 at 21:16
1
Why can't you just
(names instanceof Array ? names : [names]).map()
?– Salman A
Jan 4 at 22:06
1
@sschmeck Yes, in Javascript (and typescript) the idiomatic way to do this would be to check
typeof names === 'object' && names instanceof Array
. Typeof returns a set of string values corresponding to the basic JS types, and "instanceof" checks some prototypical inheritance stuff. These answers are neat one-liners for golfing, but it's more maintainable to just explicitly type-check rather than to get clever.– shiftweave
Jan 7 at 17:19