Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归函数数组到字符串javascript_Javascript_Arrays_Recursion - Fatal编程技术网

递归函数数组到字符串javascript

递归函数数组到字符串javascript,javascript,arrays,recursion,Javascript,Arrays,Recursion,我是javascript的初学者。 我必须执行一个递归函数,允许我以字符串的形式输出数组的串联名称。 拥有很少,我在那里,除了我最后的价值是给我的未定义 const用户名=['Elon'、'Susan'、'Bill'、'Marika'、'Ryan']; 函数名(i){ if(i

我是javascript的初学者。 我必须执行一个递归函数,允许我以字符串的形式输出数组的串联名称。 拥有很少,我在那里,除了我最后的价值是给我的未定义

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'
uhhhh
userNames.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