首页 > 解决方案 > 将数组转换为字符串,用分隔符分隔字符串 - JavaScript

问题描述

定义一个函数 ,myJoin最多接受两个参数:

  1. array
  2. separator(字符串,可选)

myJoin应该返回一个字符串,将数组中的所有元素连接在一起。分隔符应分隔连接的元素:

myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"

如果未定义分隔符,则','用作默认分隔符。

myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"

如果数组中的任何元素是undefinednull,则应在返回的字符串中将它们替换为空字符串。

myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"

我不能使用内置join方法。

链接到 codepen 进行测试

到目前为止,我已经尝试过:

function myJoin (array, separator) {

  let newString = "";

  if (separator = undefined) {
    separator === ",";
  }

  else {

    for (let i = 0; i < array.length; i++) {
      newString = i + separator;
    }

  }

  newString = array.toString();

  return newString;

}

console.log(myJoin(['a', 'b', 'c'], '+'));

^ 这不是将字符串的元素与分隔符组合在一起,实际上是返回a,b,c两次。知道为什么吗?

编辑:在@Jonas Wilms 的建议之后首次更新代码:

function myJoin (array, separator) {

  let newString = "";

  if (separator === undefined) {
    separator === ",";
  }

  for (let i = 0; i < array.length; i++) {
    newString += array[i] + separator;
  }

  return newString;

}

这似乎在我的 VS Code 控制台中有效,但在 CodePen 中无效。

标签: javascriptarraysstringfunctionseparator

解决方案


尝试

array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '') 

function myJoin(array, separator=',') { 
  return array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '') 
}

console.log( myJoin(['a', 'b', 'c'], '+') ); 
console.log( myJoin(['Peter', 'Paul', 'Mary']) );
console.log( myJoin(['hello', undefined, 'world'], '-') );

我们在这里使用标准的 js 功能:箭头函数数组归约三元运算符。如果i>0(仅对第一个元素不成立)我们将分隔符添加到输出字符串s。如果未定义或为空x,我们将添加到空字符串 - 或在其他情况下添加值。sx


推荐阅读