【问题标题】:javascript string conversion [closed]javascript字符串转换[关闭]
【发布时间】:2014-01-08 08:48:59
【问题描述】:

我有一个数组

var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];

(这是javascript); 我不知道如何将这个数组转换为输出:

["2:6,3", "1:1,2", "3:1"];

你能帮我吗?

【问题讨论】:

  • 转换背后的逻辑是什么?
  • 也许您应该告诉我们更多您是如何获得该输出的...
  • 这是由“:”前的第一个数字组成的组
  • @user889349 - 什么?...

标签: javascript arrays string object


【解决方案1】:

您似乎想将列表中具有相同初始数字的元素组合在一起。此代码将为您提供关联数组 {"1":"1,2","2":"6,3","3§:"1"} 作为输出:

   var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];
   var hist = {};
   arr.map( function (a) { b=a.split(":");c=b[0]; if (c in hist) hist[c]=hist[c].concat(","+b[1]); else hist[c] = b[1]; } );
   alert(JSON.stringify(hist));

另见JavaScript Group By Array

【讨论】:

  • 很好,今天学到了一些东西。 :-)
  • 谢谢!很好的解决方案。
【解决方案2】:
var interm = {}, output = [], regx = /(\d+):(\d+)/;
arr.forEach(function(x) {var y = regx.exec(x); if (y[1] in interm) interm[y[1]].push(y[2]); else interm[y[1]] = [y[2]]});
Object.keys(interm).map(function(x) { output.push(x + ":" + interm[x].join(',')) });

console.log(output);

[ '1:1,2', '2:6,3', '3:1' ]

就速度而言,这远不是最有效的转换,因为它使用正则表达式和forEach,但它相当简洁,您没有提到您需要任何特别快速的东西。

【讨论】:

  • 甜蜜的解决方案,太...
【解决方案3】:

请看这个LINK..

或应用以下代码...

HTML 代码...

<input type='button' id='s' value='test' onclick="test()"/>

JQuery 代码...

function test() {

    var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];
    var resultStr = "";

    for (i = 0; i < arr.length; i++) {

        if (i <= arr.length - 2) {
            var a = arr[i + 1].split(":");
            if (a.length > 0) {
                resultStr += arr[i] + ',' + a[1] + ' | ';
            }
        } else {
            var str = arr[i];
            resultStr += arr[i];
        }
        i++;
    }

    alert(resultStr);
}

【讨论】:

    【解决方案4】:

    这是JSFiddle 上的一个工作示例

    还有下面的示例代码,

    var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];
    var tdarray = {};
    var newarray = [];
    
    for(var i=0;i<arr.length;i++){
        var data = arr[i].split(":");
        var found = false;
        for(var key in tdarray){
            if(data[0]==key){
                found = true;
                break;
            }
        }
        var list=[];
        if(found){
            list = tdarray[data[0]];
        }
        list.push(data[1]);
        tdarray[data[0]] = list;
    }
    for(key in tdarray){   
        var data = key + ":" + tdarray[key].join();
        newarray.push(data);
    }
    
    console.log(newarray);
    

    【讨论】:

      【解决方案5】:

      还有另一种可能的解决方案……

      var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"], alreadyUsedNumbers = [];
      for (var i=0; i < arr.length; i++) {
         var key = arr[i].split(":")[0], value = arr[i].split(":")[1];
      
         if (alreadyUsedNumbers.indexOf(key) >= 0) {
           for (var j=0; j < i; j++) {
              if (arr[j].indexOf(key) == 0) {
                 arr[j] += ","+value;
                 arr.splice(i, 1)
                 i--;
                 break;
              }
           }
         } else {
             alreadyUsedNumbers.push(key);
         }
      }
      console.log(arr);
      

      ...享受。

      【讨论】:

        【解决方案6】:
        var arr = ["2:6", "2:3", "1:1", "1:2", "3:1", "4:6", "3:4"];
        var output = new Array();
        var outputString = "[";
        
        for(var i=0; i<arr.length; i++)
        {
            var index = arr[i].indexOf(":");
            var firstNr = arr[i].substring(0,index);
            var secondNr = arr[i].substring(index+1,arr[i].length);
        
            var outputPart = firstNr + ":" + secondNr;
            var j = i+1;
            while (j<arr.length)
            {
                var index2 = arr[j].indexOf(":");
                var firstNr2 = arr[j].substring(0,index2);
                var secondNr2 = arr[j].substring(index2+1,arr[j].length);
                if (firstNr == firstNr2)
                {   
                    outputPart +=  "," + secondNr2;  
                    arr.splice(j,1);
                }
                else
                    j++;
            }
            output.push(outputPart);
        }
        for(var k=0; k<output.length; k++)
            outputString += "'" + output[k] + "' ";
        outputString += "]";
        alert(outputString);
        

        在这里演示:http://jsfiddle.net/er144/QYca2/

        【讨论】:

          【解决方案7】:

          您的输出看起来很像地图。我会写成:

          {
            2 : [ 6, 3 ],
            1 : [ 1, 2 ],
            3 : [ 1 ]
          }
          

          要获得该映射,我将遍历数组,提取键和值,然后将值添加到正确的数组中,如果尚未创建,请确保创建它。

          var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];
          var map = {};
          arr.forEach(function(item){
            var split = item.split(':');
            if (!map[split[0]]) map[split[0]] = [split[1]];
            else map[split[0]].push(split[1]);
          });
          

          显然,从我的地图中你可以很容易地得到你想要的数组:

          var result = [];
          for (var key in map) {
            if (map.hasOwnProperty(key)) // best practice
              result.push(key+':'+map[key]);
          }
          
          console.log(result); // ["1:1,2", "2:6,3", "3:1"]
          

          注意:它的项目顺序与您的顺序不同,但可以通过迭代原始数组以获取键而不是使用 for..in 来轻松解决:

          var result = [];
          arr.forEach(function(item){
            var key = item.split(':')[0];
            if (map[key]) {
              result.push(key+':'+map[key]);
              delete map[key]; // destroys the map!
            }
          });
          
          console.log(result); // ["2:6,3", "1:1,2", "3:1"]
          

          解决方案 2(无中间图):

          此解决方案的复杂度为 O(n^2):

          var arr = ["2:6", "2:3", "1:1", "1:2", "3:1"];
          
          var result = [];
          for (var i=0; i<arr.length; i++) {
            if (!arr[i]) continue;
            var key = arr[i].split(':')[0];
            var values = [];
            for (var j=i; j<arr.length; j++) {
              var split = arr[j].split(':');
              if (split[0] === key) {
                values.push(split[1]);
                arr[j] = undefined; // destroys the original array
              }          
            }
            result.push(key + ':' + values);
          }
          
          console.log(result); // ["2:6,3", "1:1,2", "3:1"]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-06-09
            • 2018-05-11
            • 2015-08-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-02
            • 2017-02-12
            相关资源
            最近更新 更多