【问题标题】:How to take an array, and insert commas between each item?如何获取一个数组,并在每个项目之间插入逗号?
【发布时间】:2017-07-10 04:09:57
【问题描述】:

我试图了解如何获取像[1,2,3,4,5] 这样的数组,然后在每个索引之间添加一个,,以便数组变为[1, ', ', 2, ', ', 3, ', ', 4, ', ', 5]

我知道这听起来很愚蠢,但我遇到了一些问题。

基本上,我想使用类似splice() 的方法,这样我就可以遍历数组和每个奇数索引,我可以使用splice(index, 0, ', ')

【问题讨论】:

  • 与其尝试修改您的数组,不如返回一个新数组——这将更容易实现。
  • 快速破解:arr.join(',').split(''); - JS 引擎会更喜欢它们都是同一类型(您将拥有一个字符串数组),但这取决于您是否真的需要数字类型的混合字符串或不是。
  • 对于 ES6,stackoverflow.com/questions/37128624/… 的副本。
  • 谢谢。我正在尝试关注 JS 面试问题,其中之一是在 console.log 中添加一些文本。我能够正确回答这个问题,所以我试图挑战自己添加逗号分隔(我知道控制台日志不会这样做),但现在我自己的挑战失败了
  • "基本上,我想使用类似 splice() 的方法,这样我就可以遍历数组和每个奇数索引,我可以做 splice(index, 0, ', ' )"1 开始索引,递增索引由2 传递给.splice()

标签: javascript arrays


【解决方案1】:

您可以使用.reduce 方法,该方法接受callback 函数作为参数。

reduce() 方法对累加器应用一个函数,每个 数组的值(从左到右)将其减少为单个 价值。

var array=[1,2,3,4,5];
console.log(array.reduce(function(a,b){
    return a.concat(b).concat(",");
},[]).slice(0,-1));

【讨论】:

  • 您的解决方案不应在结果末尾添加逗号
【解决方案2】:

使用.reduce()

  1. 从空数组开始
  2. 推送array的元素,然后推送', '
  3. 最后使用.pop() 删除最后一个', '

var array1 = [1, 2, 3, 4, 5]

var array2 = array1.reduce(function(acc, val) {
  acc.push(val);
  acc.push(', ');
  return acc;
}, []);

array2.pop();

console.log(array2);

【讨论】:

    【解决方案3】:

    您可以使用reduce 创建一个包含插入值的新数组:

    function weaveArray(array, weaveValue) {
      const {length} = array;
      return array.reduce((result, value, i) => {
        if(i < length - 1) {
          result.push(value, weaveValue);
        } else {
          result.push(value);
        }
        return result;
      }, []);
    }
    
    console.log(
      weaveArray([1,2,3,4,5], ",")
    );

    【讨论】:

      【解决方案4】:

      console.log([1,2,3,4,5].reduce(function(acc, val, idx, list) {
        acc.push(val);
        if (idx < list.length - 1) {
          acc.push(',');
      
        }
        return acc;
      }, []));

      【讨论】:

        【解决方案5】:

        只有两种方法:

        编辑

        如果您想保存逗号,请改用一些正则表达式:

        var c = a.join(', , , ').split(/\s(?=,\s)/);

        var a = [1,2,3,4,5];
        var b = a.join(' , ').split(' ');
        var c = a.join(', ,  , ').split(/\s(?=,\s)/);
        console.log(b,c);

        【讨论】:

        • 请参阅我上面的评论 - 您可能希望提及类型与问题不匹配。
        • 您的评论很糟糕,因为2233 值会将其分为22 等。
        • 我只考虑了评论中的单个数字,但它并没有改变关于类型的信息(特别是 JS 引擎 hate 混合类型数组 - 所有字符串的数组好多了)。
        【解决方案6】:

        使用Array.prototype.join()Array.prototype.map()String.prototype.match() 函数的简短解决方案:

        var arr = [1,2,3,4,5],
            newArr = arr.join(',').match(/\w+|\W+/g).map(function(v){
                return (isNaN(v))? v : +v;  // considering numeric values
            });
        
        console.log(newArr);

        你想要splice 方法吗?这里是:

        var arr = [1,2,3,4,5];
        for (var i = 1; i < arr.length; i+=2) {
            arr.splice(i, 0, ',');
        }
        
        console.log(arr);

        【讨论】:

          【解决方案7】:

          您可以使用.splice() 处的变量将索引增加2

          var arr = [1,2,3,4,5];
          for (let i = 1, len = arr.length * 2; arr.length < len - 1; arr.splice(i, 0, ","), i += 2);
          console.log(arr);

          【讨论】:

            猜你喜欢
            • 2020-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-31
            • 1970-01-01
            • 1970-01-01
            • 2019-02-23
            • 1970-01-01
            相关资源
            最近更新 更多