【问题标题】:Convert array to comma-delimited text将数组转换为逗号分隔的文本
【发布时间】:2023-04-04 08:44:01
【问题描述】:

为这个令人尴尬的简单问题道歉,但我对 javascript 还是比较陌生。

我有一个名字数组,比如

var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N'];

我想返回一个字符串,名称用逗号分隔,但最后两个名称之间有“and”,即

'Hill M, Zhang F, Dong L, Wilkinson JS and Harris N'

在 javascript 中最有效的方法是什么?

如果我想调换姓名和首字母,即返回

'M Hill, F Zhang, L Dong, JS Wilkinson and N Harris'

【问题讨论】:

    标签: javascript arrays string


    【解决方案1】:

    Array::slice() 选择数组的一部分,并返回新数组。
    Array::join() 将数组的所有元素连接成一个字符串
    String::concat() 连接两个或多个字符串。

    var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N'];
    
    console.log(myArray.slice(0, myArray.length - 1).join(', ').concat(
                ' and ' + myArray[myArray.length - 1]));
    
    //Hill M, Zhang F, Dong L, Wilkinson JS and Harris N
    

    改变他们的顺序:

    var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N'];
    
    for(var i = 0; i < myArray.length; i++)
      myArray[i] = myArray[i].replace(/^(\S+)\s+(.+)$/, '$2 $1');
    
    console.log(myArray.slice(0, myArray.length - 1).join(', ').concat(
                ' and ' + myArray[myArray.length - 1]));
    
    //M Hill, F Zhang, L Dong, JS Wilkinson and N Harris
    

    如果你想知道str.replace(/^(\S+)\s+(.+)$/, '$2 $1');

    /^(\S+)\s+(.+)$/ 是匹配以下字符串的正则表达式:

    ^    #starts with  
    \S+  #one or more non whitespace characters, followed by  
    \s+  #one or more whitespace characters, followed by  
    .+   #one or more characters  
    

    替换字符串中的$1$2 代表正则表达式中的第一组和第二组(括号中的子模式)。

    【讨论】:

    • 这很好,但是给一些解释,也许? OP说他是js新手。
    • 效果很好 - 非常感谢。唯一的小问题是第二部分(反转/换位)对于诸如“Ben Gaied N”之类的名称失败,但我没有明确询问这个问题,我相信我可以解决这个问题。
    • @Tomba 正则表达式当前在第一个空格处交换单词。使用/(.+)\s+(\S+)/ 在最后一个空格处进行交换。
    • 诗歌,除非数组包含零个或一个元素时失败。微不足道的修复。谢谢!
    • 你能分享一个 if 数组包含一个元素吗?
    【解决方案2】:

    使用 join 组合数组中的值。

    var myJoinedString = myArray.join(',');
    

    【讨论】:

      【解决方案3】:
      var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N'];
      var replaced = myArray.map(function(elem) {
        return elem.replace(/(\S+)\s+(\S+)/, "$2 $1");
      });
      var last = replaced.pop()
      var result = replaced.join(", ") + " and " + last;
      
      alert(result)
      

      【讨论】:

      • 很好,但您可能希望使用 /^(.*?)\s+(\S+)$/ 代替您的表达式
      【解决方案4】:

      试试这个:

      if (myArray.length <= 1) {
          str = myArray.join();
      } else {
          str = myArray.slice(0, -1).join(", ") + " and " + myArray[myArray.length-1];
      }
      

      对于你的交换部分:

      myArray.map(function(val) { return val.split(" ").reverse().join(" "); })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多