如何不使用.join()来连接字符串数组?

时间:2019-02-15 10:14:19

标签: javascript

我们正在尝试编写一个函数,该函数接受一个字符串数组和一个分隔符,并将所有由该分隔符分隔的字符串连接起来。

我们不允许使用.join()方法。

到目前为止,尽管每次所有字符串都在它们之间添加了一个分隔符,但我仍坚持尝试进行迭代。

我尝试过类似的事情:

var aName = ['Frank','Vincent','Zappa'];


var join = (arr, separator = " ") => {
    for(var i = 0; i < arr.length; i++) {
        return arr[i] + separator + arr[i+1];
    }
};

join(aName, ' '); 

//output: "Frank Vincent"
//expected output: "Frank Vincent Zappa"

感谢您的帮助。

11 个答案:

答案 0 :(得分:2)

要修复您当前的代码,请尝试串联,并且仅在末尾return

var aName = ['Frank', 'Vincent', 'Zappa'];


var join = (arr, separator = " ") => {
  let result = '';
  for (var i = 0; i < arr.length; i++) {
    if (result) {
      result += separator;
    }
    result += arr[i];
  }
  return result;
};

console.log(join(aName, ' '));

答案 1 :(得分:1)

您可以使用String constructor

var name = ['Frank', 'Vincent', 'Zappa'];
console.log(String(name).replace(/,/g,' '))

答案 2 :(得分:1)

一种非常简单的方法是仅对第二个元素追加分隔符:

const arr = ["Frank", "Vincent", "Zappa"];

const join = (arr, sep = " ") => {
  if (!arr || !arr.length) return "";
  let ret = arr[0];
  for (let i = 1; i < arr.length; i++) {
    ret += sep + arr[i];
  }
  return ret;
};

console.log(join(arr));
console.log(join(arr, "-"));

答案 3 :(得分:1)

您可以减少数组:

function join(arr, separator)
{
    return arr.reduce((str, a)=> {return a+separator+str})
}

答案 4 :(得分:1)

您可以先检查数组的长度,如果长度为零,则返回一个空字符串。

否则,将第一个元素作为结果的起始值,并从第二个元素进行迭代,并添加分隔符和数组的值。

继续直到没有其他元素。然后返回结果字符串。

var join = (array, separator = ' ') => {
        if (!array.length) return '';
        var result = array[0];
        for (var i = 1; i < array.length; i++) {
            result += separator + array[i];
        }
        return result;
    },
    array = ['Frank', 'Vincent', 'Zappa'];

console.log(join(array, ' '));

答案 5 :(得分:0)

您的代码存在的问题是,您在return循环中使用了for,这意味着该函数将停止执行并返回您在return中编写的值。

为避免这种情况,您应该编写如下内容:

var name = ['Frank','Vincent','Zappa'];


var join = (arr, separator = " ") => {
    var result = '';
    for(var i = 0; i < arr.length; i++) {
        // adding to result string arr[i] and separator
        result += arr[i] + separator;       
    }
    // deleting separator in the end of string
    return result.slice(0, -1);
};

join(name, ' '); 

答案 6 :(得分:0)

我认为目标是学习JavaScript基础而不是技巧。只需使用以下方法:

syslog-ng

答案 7 :(得分:0)

准确地说,如果没有join(),就无法创建字符串,因为JavaScript在内部始终会为数组调用join()。但是,如果您只想创建自己的join()函数,则可以遍历数组,在当前项目中添加一个分隔符,然后执行此操作,直到到达只添加当前项目而没有分隔符的末尾为止。

var name = ['Frank', 'Vincent', 'Zappa'];

function join(arr, separator = " ") {
    var str = "";

    if (arr.length === 0) return str;

    for (var i = 0; i < arr.length; i++) {
        str += i !== arr.length - 1 ?
            arr[i] + separator :
            arr[i];
    }

    return str;
};

console.log(join(name, ' '));

答案 8 :(得分:0)

在es2015中使用咖喱函数的解决方案

const joinStrings = glue = ' ' => strings => {
  let res = '';
  strings.forEach(str => res += glue + str);
  return res.replace(glue, '');
}

const joined = joinStrings(', ')(['a', 'b', 'c']);
console.log(joined);

答案 9 :(得分:0)

var names = ['Frank','Vincent','Zappa'];

const join = (names, separator) => {
  let str = '';

  for(let i = 0; i < names.length; i++) {
    str += (str ? separator : '') + names[i];
  }

  return str;
}

console.log(join(names, ' '));

答案 10 :(得分:0)

function joinFunction(arr){
  let string = ''
 for( let char of arr ){
     string += char + ' '
 }
  console.log(string) 
}

joinFunction(['Frank','Vincent','Zappa'])