递归函数数组到字符串javascript
我是javascript的初学者。 我必须执行一个递归函数,允许我以字符串的形式输出数组的串联名称。 拥有很少,我在那里,除了我最后的价值是给我的未定义递归函数数组到字符串javascript,javascript,arrays,recursion,Javascript,Arrays,Recursion,我是javascript的初学者。 我必须执行一个递归函数,允许我以字符串的形式输出数组的串联名称。 拥有很少,我在那里,除了我最后的价值是给我的未定义 const用户名=['Elon'、'Susan'、'Bill'、'Marika'、'Ryan']; 函数名(i){ if(i
const用户名=['Elon'、'Susan'、'Bill'、'Marika'、'Ryan'];
函数名(i){
if(i 姓名(0)代码>首先,您可以使用join()
方法:
const用户名=['Elon'、'Susan'、'Bill'、'Marika'、'Ryan'];
console.log(用户名.join('-')代码>问题是您将递归代码与用于在末尾打印字符串的代码混合在一起。递归调用命中“else”块并一直到达函数的末尾。由于在函数末尾没有定义“return”,最后一个“name(++i)”调用的计算结果为“undefined”,这将连接到原始字符串。以下是两种解决方案:
const userNames = ['Elon', 'Susan', 'Bill', 'Marika', 'Ryan'];
function name(i) {
if (i === userNames.length) {
return '';
}
else {
return userNames[i] + ' - ' + name(++i);
}
}
function printList() {
console.log(name(0))
}
printList();
或
const namesList=['Elon','Susan','Bill','Marika','Ryan'];
函数名(i){
if(i
首先考虑函数的完整域。函数接受字符串数组。数组可以包含0、1或更多字符串,我们需要您的函数来处理所有情况
// contract
joinStrings([]) == ''
joinStrings([a]) == a
joinStrings([a,b]) == a + '-' + b
joinStrings([a,b,c]) == a + '-' + b + '-' + c
在JavaScript中,在递归函数中对其进行编码是很简单的——注意,不需要跟踪数组索引或担心增加迭代器——只要考虑履行该契约即可
constjoinstrings=xs=>{
开关(xs.长度){
案例0:返回“”
案例1:返回xs[0]
默认值:返回xs[0]+'-'+joinStrings(xs.slice(1))
}
}
console.log(joinStrings([])/“”
log(joinStrings(['a'])/'a'
log(joinStrings(['a','b'])/'a-b'
log(joinStrings(['a','b','c'])/'a-b-c'
uhhhhuserNames.join(“-”)
??可能是因为您没有在else
案例中返回任何内容。@NiettheDarkAbsol这看起来像是一个赋值,因此完全无法达到目的。.join对我来说是一个“禁止”的函数。严格要求执行递归函数!:但不幸的是,这将留下一个尾随的破折号。但无论如何,我同意这个解决方案。这和我要发布的代码是一样的。@Carcigenicate好吧,我认为OP的作用是理解递归是如何工作的——有很多更简单的方法来实现他想要做的事情。无论如何,你是对的,我更新了函数来考虑这个问题。是的,我只是想指出它。我试图通过在JSRun应用程序中在我的手机上乱搞来修复它,但修复它会使代码更加复杂,并偏离原始问题。这是一种狡猾的方法,但我选择了这种解决方案。我不会想到这个。谢谢女士们先生们D
// contract
joinStrings([]) == ''
joinStrings([a]) == a
joinStrings([a,b]) == a + '-' + b
joinStrings([a,b,c]) == a + '-' + b + '-' + c