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_String_Function_Separator - Fatal编程技术网

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

将数组转换为字符串,使用分隔符分隔字符串-JavaScript,javascript,arrays,string,function,separator,Javascript,Arrays,String,Function,Separator,定义一个函数,myJoin,该函数最多接受两个参数: 数组 分隔符(字符串,可选) myJoin应返回一个字符串,其中数组中的所有元素都连接在一起。分隔符应分隔连接的图元: myJoin(['a', 'b', 'c'], '+'); // => "a+b+c" 如果未定义分隔符,请使用“”、“作为默认分隔符 myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary" 如果数组中的任何元素未定义或空,则应在返回的字符串中用空

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

  • 数组
  • 分隔符
    (字符串,可选)
  • myJoin
    应返回一个字符串,其中数组中的所有元素都连接在一起。分隔符应分隔连接的图元:

    myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
    
    如果未定义分隔符,请使用“
    ”、“
    作为默认分隔符

    myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
    
    如果数组中的任何元素
    未定义
    ,则应在返回的字符串中用空字符串替换它们

    myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"
    
    我不能使用内置的方法

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

    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'], '+'));
    
    这似乎在我的VS代码控制台中起作用,但在代码笔中不起作用。

    一些提示:

    • 不要混淆赋值(
      =
      )运算符和比较(
      =
      )运算符<代码>如果(a=b)在99%的情况下是错误的

    • <> >代码>数组.toStrug()/Cult>确实调用内部的代码< >数组.Cube()/代码>内部,我认为这是作弊,我也不确定你想用它来实现什么(我的意思是<代码> NexStudio<代码>应该已经包含了想要的结果,如果你正确地做了循环,不是吗?)

    • i
      数组中的索引
      要获取该位置的值,请使用
      array[i]

    • 我不认为您的循环应该在
      else{
      分支中,我认为您根本不需要
      else
      分支(因为您总是希望通过循环来加入数组)

    • 使用
      newString=
      重新分配
      newString
      并释放上一个值,您可能希望使用
      newString+=
      向其追加一个值

    试试看

    array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '') 
    
    函数myJoin(数组,分隔符=','){ 返回数组.reduce((s,x,i)=>s+(i>0?分隔符:“”)+(x==null?“”:x),“”) } log(myJoin(['a','b','c'],'+'); log(myJoin(['Peter','Paul','Mary']); log(myJoin(['hello',未定义,'world'],'-');您可以使用它加入阵列

    让arr=['a','b',未定义,'c','d',null',e'];
    myJoin=(arr,分隔符=',')=>
    arr.reduce((acc,val,i)=>
    acc+([undefined,null].indexOf(val)>=0?'':val)+
    (iconsole.log('arr.join(“+”)、arr.join('+');
    使用
    map
    forEach
    模板字符串,如下所示:

    函数myJoin(arr,sep=“,”){
    arr=arr.map(e=>[未定义,null]。包括(e)?“”:e);
    var结果=”;
    arr.forEach((e,i)=>result+=`${i?sep:“}${e}`);
    返回结果;
    }
    log(myJoin(['Peter',未定义,'Paul',null,'Mary','Jack'],“-”);
    函数myJoin(数组,分隔符=','){ 设str=''; for(设i=0;ilog(myJoin(['a','b',undefined],'.');使用默认语法设置分隔符
    |
    a
    forEach
    接受
    索引
    数组
    测试最后一个元素

    函数myJoin(数组、分隔符){
    让newString=“”;
    分隔符=分隔符| |',';
    array.forEach((a,i,arr)=>{
    newString+=`${a}${(iconsole.log(myJoin(['a','b','c'],'-');
    你能解释你的代码吗?for循环的
    不应该在
    else
    子句中,而
    if
    测试中的比较应该是
    =
    而不是
    =
    =
    用于赋值)。当然,我想说的是,如果定义了分隔符,则在数组中循环创建一个带有数组中项目的
    newString
    I
    )+分隔符
    。然后将
    newString
    转换为字符串并返回它。如果(分隔符=未定义),则代码
    if
    正在将变量分隔符赋值给
    未定义的
    值,而不是您期望的比较。
    不要在回答中使用内置的.join数组方法。
    修复了它@Keith。请查看我最近的编辑-我已尝试尽可能多地利用您的提示进行构建。@happyHands31您还向t添加了分隔符最后一项,结果是“a,b,c”…因此我需要使用
    .pop()
    .slice()从返回的数组中删除最后一项
    ?对不起,我不明白参数
    …params
    的用法。你能用参数
    数组
    分隔符
    像我的代码一样重写它吗?@HappyHands31…params接受所有参数并用它组成一个数组。但是现在用这两个参数更容易理解谢谢-是的现在它是有意义的,并且是有效的。因此,对于两个
    if语句
    ,它在附加
    数组[i]之间交替进行
    分隔符
    str
    ?执行
    if语句
    替换它们默认附加的内容?第一个
    if
    检查您的值是否应该附加到字符串中(非空且非未定义)。第二个
    if
    检查如果我们在数组的最后一项,我们没有放置分隔符(避免将分隔符放在末尾)separator=',表示“默认值”。因此,如果只提供一个参数,分隔符将设置为“,”。如果提供两个参数,则“,”将被第二个参数覆盖。为什么工作代码会在没有注释的情况下获得否决票?使用数组
    array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')