【问题标题】:Convert string with commas to array将带逗号的字符串转换为数组
【发布时间】:2012-10-27 16:01:18
【问题描述】:

如何将字符串转换为 JavaScript 数组?

看代码:

var string = "0,1";
var array = [string];
alert(array[0]);

在这种情况下,alert 会弹出一个0,1。当它是一个数组时,它会弹出一个0,当调用alert(array[1]);时,它应该弹出1

有没有机会将这样的字符串转换成 JavaScript 数组?

【问题讨论】:

标签: javascript arrays string deserialization


【解决方案1】:

正则表达式

作为split 更强大的替代品,您可以使用match

"0,1".match(/\d+/g)

let a = "0,1".match(/\d+/g)

console.log(a);

【讨论】:

    【解决方案2】:

    您可以使用 javascript Spread Syntax 将字符串转换为数组。在下面的解决方案中,我删除了逗号,然后将字符串转换为数组。

    var string = "0,1"
    var array = [...string.replace(',', '')]
    console.log(array[0])
    

    【讨论】:

      【解决方案3】:

      How to Convert Comma Separated String into an Array in JavaScript?

      var string = 'hello, world, test, test2, rummy, words';
      var arr = string.split(', '); // split string on comma space
      console.log( arr );
       
      //Output
      ["hello", "world", "test", "test2", "rummy", "words"]
      

      更多使用以下方式在javascript中将字符串转换为数组的示例:

      1. Split() – 无分隔符:

      2. Split() – 空字符串分隔符:

      3. Split() – 开始/结束处的分隔符:

      4. 正则表达式分隔符:

      5. 捕获括号:

      6. 带有限制参数的Split()

        查看此链接 ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/

      【讨论】:

        【解决方案4】:

        使用Array.filter的示例:

        var str = 'a,b,hi,ma,n,yu';
        
        var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');
        

        【讨论】:

          【解决方案5】:

          转换所有类型的字符串

          var array = (new Function("return [" + str+ "];")());
          
          
          
          var string = "0,1";
          
          var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';
          
          var stringArray = (new Function("return [" + string+ "];")());
          
          var objectStringArray = (new Function("return [" + objectstring+ "];")());
          

          JSFiddle https://jsfiddle.net/7ne9L4Lj/1/

          控制台中的结果

          有些做法不支持对象字符串

          - JSON.parse("[" + string + "]"); // throw error
          
           - string.split(",") 
          // unexpected result 
             ["{Name:"Tshirt"", " CatGroupName:"Clothes"", " Gender:"male-female"}", "      {Name:"Dress"", " CatGroupName:"Clothes"", " Gender:"female"}", " {Name:"Belt"",    " CatGroupName:"Leather"", " Gender:"child"}"]
          

          【讨论】:

          • 很棒的功能我也使用它,但不幸的是它不适用于字符串或符号:例如“0,s”有什么办法解决这个问题吗?
          • @sqp_125 try 0,'s' ?
          【解决方案6】:

          更多“亲自尝试”示例如下。

          定义和用法 split() 方法用于将字符串拆分为子字符串数组,并返回新的数组。

          提示:如果使用空字符串(“”)作为分隔符,则字符串在每个字符之间进行分割。

          注意:split() 方法不会改变原始字符串。

          var res = str.split(",");
          

          【讨论】:

            【解决方案7】:

            这在 ES6 中很容易实现;

            您可以使用Array.from('string') 将字符串转换为数组;

            Array.from("01")
            

            将控制台.log

            ['0', '1']
            

            这正是您要寻找的。​​p>

            【讨论】:

            • 这太棒了。我将我的代码从JSON.parse 移动到Array.from,就像使用ES6 一样。谢谢Ray Kim
            • 任何版本的 IE 都不支持此功能。小心
            • 但是Array.from("0, 1, 233")会返回["0", ",", " ", "1", ",", " ", "2", "3", "3"],如果我想要[0, 1, 233] 呢?
            • 糟糕的解决方案!更多信息见https://github.com/gildata/RAIO/issues/116#issuecomment-325901359
            • 这会将每个字符转换为数组元素。但是我们只需要逗号分隔的字符串作为数组元素。所以不是一个有效的解决方案。
            【解决方案8】:

            我删除字符 '[',']' 并使用 ',' 进行拆分

            let array = stringObject.replace('[','').replace(']','').split(",").map(String);
            

            【讨论】:

              【解决方案9】:

              var i = "[{a:1,b:2}]",
                  j = i.replace(/([a-zA-Z0-9]+?):/g, '"$1":').replace(/'/g,'"'),
                  k = JSON.parse(j);
              
              console.log(k)

              // => 声明正则表达式

              [a-zA-Z0-9] => 匹配所有 a-z、A-Z、0-9

              (): => 将所有匹配的元素分组

              $1 => 替换字符串指的是正则表达式中的第一个匹配组。

              g => 全局标志

              【讨论】:

                【解决方案10】:

                Split(",") 可以将带逗号的字符串转换成字符串数组,这是我的代码sn-p。

                    var input ='Hybrid App, Phone-Gap, Apache Cordova, HTML5, JavaScript, BootStrap, JQuery, CSS3, Android Wear API'
                    var output = input.split(",");
                    console.log(output);
                

                [“混合应用”、“Phone-Gap”、“Apache Cordova”、“HTML5”、“ JavaScript”、“BootStrap”、“JQuery”、“CSS3”、“Android Wear API”]

                【讨论】:

                  【解决方案11】:

                  你可以使用split

                  参考: http://www.w3schools.com/jsref/jsref_split.asp

                  "0,1".split(',')

                  【讨论】:

                    【解决方案12】:

                    使用 ES6 的另一个选项是使用 Spread 语法。

                    var convertedArray = [..."01234"];

                    var stringToConvert = "012";
                    var convertedArray  = [...stringToConvert];
                    console.log(convertedArray);

                    【讨论】:

                    • 太棒了!与 Array.from 答案一起,它们应该是 ES6 解决方案的唯一答案。
                    【解决方案13】:

                    你为什么不把,逗号和split('')这样的字符串替换成['0', '1'],此外,你可以将结果包装成parseInt()来将元素转换为整数类型。

                    it('convert string to array', function () {
                      expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
                    });
                    

                    【讨论】:

                      【解决方案14】:

                      将内置的 map 函数与匿名函数一起使用,如下所示:

                      string.split(',').map(function(n) {return Number(n);});
                      

                      [编辑]这是你将如何使用它

                      var string = "0,1";
                      var array = string.split(',').map(function(n) {
                          return Number(n);
                      });
                      alert( array[0] );
                      

                      【讨论】:

                      • 这是最普遍适用的答案。 JSON 不能用于任意分隔符(例如制表符、空格等)
                      • 当您的数组值是可能包含逗号的字符串值时,这将不起作用。例如:"123, 'a string with a , comma', 456"。您可以使用更复杂的正则表达式来正确处理此类情况(例如建议的here)。
                      • @Wilt 不,它不会,但是你可以使用正则表达式来解决这个问题
                      • 我并不是要批评你的回答,但我写这个是因为我使用了你的解决方案,自己也遇到了这个问题。考虑将评论留给其他可能遇到类似问题的人。
                      【解决方案15】:

                      如果字符串已经是列表格式,可以使用JSON.parse:

                      var a = "['a', 'b', 'c']";
                      a = a.replace(/'/g, '"');
                      a = JSON.parse(a);
                      

                      【讨论】:

                        【解决方案16】:

                        对于这样的简单数组成员,您可以使用 JSON.parse。

                        var listValues = "[{\"ComplianceTaskID\":75305,\"RequirementTypeID\":4,\"MissedRequirement\":\"Initial Photo Upload NRP\",\"TimeOverdueInMinutes\":null}]";
                        
                        var array = JSON.parse("[" + listValues + "]");
                        

                        这会给你一个数字数组。

                        现在你的变量值就像 array.length=1

                        价值输出

                        array[0].ComplianceTaskID
                        array[0].RequirementTypeID
                        array[0].MissedRequirement
                        array[0].TimeOverdueInMinutes
                        

                        【讨论】:

                          【解决方案17】:

                          对于这样的简单数组成员,您可以使用JSON.parse

                          var array = JSON.parse("[" + string + "]");
                          

                          这会给你一个数字数组。

                          [0, 1]
                          

                          如果你使用.split(),你最终会得到一个字符串数组。

                          ["0", "1"]
                          

                          请注意,JSON.parse 会将您限制为支持的数据类型。如果您需要 undefined 之类的值或函数,则需要使用 eval() 或 JavaScript 解析器。


                          如果你想使用.split(),但你还需要一个数字数组,你可以使用Array.prototype.map,尽管你需要为 IE8 和更低版本填充它,或者只写一个传统的循环。

                          var array = string.split(",").map(Number);
                          

                          【讨论】:

                          • 还要注意JSON.parse(); 在 IE6、IE7 中不可用。我认为在这种情况下String.split(','); 更容易。
                          • @scunliffe:确实,需要一个 shim,或者可以采用 jQuery 方法对其进行 shim var array = (new Function("return [" + string + "];"))()。如果不需要 Numbers,则使用 .split() 是可以的,否则您需要映射结果。
                          • @Downvoter:试着描述一下答案有什么问题,这样我就可以证明你错了。
                          • @I Hate Lazy 这不支持对象字符串。请参阅此处stackoverflow.com/a/32657055/2632619
                          • @FarzadYZ 小心(使用eval)。如果数组包含来自客户端输入的值,这将是不安全的。
                          【解决方案18】:

                          Split , 字符;

                          var string = "0,1";
                          var array = string.split(",");
                          alert(array[0]);
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2017-11-07
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2021-12-18
                            • 1970-01-01
                            相关资源
                            最近更新 更多