将数组转换为字符串,使用分隔符分隔字符串 - JavaScript

问题描述 投票:2回答:6

定义一个函数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方法。

Link to codepen for testing

到目前为止,我尝试过:

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中却没有。

javascript arrays string function separator
6个回答
2
投票

function myJoin(array, separator=',') {
  let str = '';
  for (let i = 0; i < array.length; i++) {
    if (array[i] !== null && array[i] !== undefined)
      str += array[i];
    if (i < array.length - 1)
      str += separator;
  }

  return str;
}

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

4
投票

尝试

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'], '-') );

2
投票

一些提示:

  • 不要混淆赋值(=)和比较(===)运算符。 if(a = b)在99%的案件中都是错误的。
  • array.toString()确实在内部调用array.join(),我认为这是作弊,我也不确定你想用它做什么(我的意思是newString应该已经包含想要的结果,如果你正确地执行循环,不应该吗?)
  • i是你的array中使用array[i]获得该位置值的指数。
  • 我不认为你的循环应该在else {分支中,我认为你根本不需要那个else(因为你总是希望通过循环来加入数组)。
  • newString =你重新分配newString并松开之前的值,你可能想使用newString +=为它附加一个值。

2
投票

使用默认语法设置分隔符qazxsw poi a qazxsw poi接受qazxsw poi,||forEach测试最后一个元素。

value

2
投票

indexarray与模板字符串一起使用,如下所示:

function myJoin (array, separator) {
  let newString = "";
  separator = separator||','; 
  
  array.forEach((a,i,arr) => {
    newString += `${a}${(i < arr.length-1) ? separator : ''}`;
  });
  return newString;
}

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

ES5语法:

map

1
投票

您可以使用forEach加入您的阵列。

function myJoin(arr, sep = ",") {
  arr = arr.map(e => [undefined, null].includes(e) ? "" : e);
  var result = "";
  arr.forEach((e, i) => result += `${i ? sep : ""}${e}`);
  return result;
}

console.log(myJoin(['Peter', undefined, 'Paul', null, 'Mary', 'Jack'], "-"));

希望这可以帮助,

© www.soinside.com 2019 - 2024. All rights reserved.