将数组转成字符串,用分隔符分隔字符串 - JavaScript

Hap*_*s31 3 javascript arrays string function separator

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

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

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

myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
Run Code Online (Sandbox Code Playgroud)

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

myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
Run Code Online (Sandbox Code Playgroud)

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

myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"
Run Code Online (Sandbox Code Playgroud)

我无法使用内置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'], '+'));
Run Code Online (Sandbox Code Playgroud)

^ 这不是将字符串的元素与分隔符组合在一起,实际上返回了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;

}
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*ski 6

尝试

array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '') 
Run Code Online (Sandbox Code Playgroud)

array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '') 
Run Code Online (Sandbox Code Playgroud)

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