【问题标题】:jquery logic to get the result from stringjquery逻辑从字符串中获取结果
【发布时间】:2016-09-27 07:24:40
【问题描述】:

我在 jquery var str 中有一个字符串,如下所示:

var str = 4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101

现在我想组织字符串并得到如下结果:

var result = 4(68,69,70)|5(86,87,88,89,91)|6(100,101)

似乎并不难。但我无法准确地在代码中弄清楚逻辑。

var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101';
var i = 1;
var first_item = [];
var second_item = [];
var final_item = [];
var agree_ref_data = dataRecord.agreement_ref_no;
var main_arr = agree_ref_data.split(',');
for (i = 0; i < main_arr.length; ++i) {
    var second_arr = main_arr[i].split('-');

    if (jQuery.inArray(second_arr[0], first_item) == -1) {
        first_item.push(second_arr[0]);
        //second_item.push(second_arr[1]);
    }

    if (jQuery.inArray(second_arr[0], first_item) !== -1) {

        second_item.push(second_arr[1]);

    } else {
        final_result = second_item;
        //second_item=[];
    }

}
return final_result;

}

我怎样才能得到我想要的结果?

【问题讨论】:

    标签: javascript jquery string for-loop


    【解决方案1】:

    这里是纯 js 中的代码。不需要 jQuery。我们首先用逗号分割字符串,然后迭代生成的数组,再用“-”分割。然后将值存储为 Map(为此使用普通的 js 对象)。 Rest只是迭代对象的键值对并按摩数据。

    var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101';
    var a = dataRecord.split(',');
    var obj = {};
    for(var i=0;i<a.length;i++){
      var tmp = a[i].split('-');
      if(typeof obj[tmp[0]] !== 'object'){
        obj[tmp[0]] = [];
      }
      obj[tmp[0]].push(tmp[1]);
    }
    var result = '';
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
        console.log(key + " -> " + obj[key]);
        result = result + key + '(' + obj[key].join() + ')|';
      }
    }
    result = result.substr(0,result.length-1); // removing the last | character
    

    【讨论】:

      【解决方案2】:

      完整的工作代码命题(不需要 jquery):

      var str="4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101";
      
      //##1 . Split by ,
      
      //we have array of elements like 4-68
      var arr=str.split(",");
      
      //results temporary object
      var results={};
      
      //##2 .Create temporary object
      
      for ( var el in arr){
      
          //we have parts as [4, 68]
          var parts=arr[el].split("-");
          var main=parts[0];
          var second=parts[1];
          
          if (!results.hasOwnProperty(main)){
              
              results[main]=second;//create new string for this main
              
          }else //element with main exists so add next number
          results[main]+=","+second;//concat to string
          
      }
      
      console.log("Temporary object structure:");
      console.log(results);
      
      //ok we have array with results but we need string
      var resultsStr="";
      
      //##3. Create final string
      
      for ( var main in results){
      
         if (resultsStr!="")
         resultsStr+="|"; //add | not for first one
         
         resultsStr+=main+"("+results[main]+")"; //add () to our string
         
      }
      
      console.log("Final string:");
      console.log(resultsStr);

      算法步骤:

      1. 我用 分割数组
      2. 我创建了临时结构,在其中我通过主数字创建属性,它们的值是与第二个数字连接的字符串
      3. 我根据临时结构创建字符串。

      即使主要数字的顺序不正确,算法也会运行。

      【讨论】:

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