【问题标题】:How to convert a comma separated string to separate arrays within an object?如何将逗号分隔的字符串转换为对象内的单独数组?
【发布时间】:2017-08-29 16:03:47
【问题描述】:
let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";

如何使用 javascript 将上述字符串转换为对象内的单独数组,例如:

{
  dress = ["cotton","leather","black","red","fabric"];
  houses = ["restaurant","school","small","big"];
  person = ["james"];
}

【问题讨论】:

  • 到目前为止你尝试过什么?你能把这段代码放到问题中吗?
  • 你应该看看String.split()...

标签: javascript arrays string object


【解决方案1】:

拆分字符串!

//The Entry String
myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";

//The first Array
var objectArray = myStr.split(',');

//Loop trough each item of the array
for(var i in objectArray){
    //The final sub-array
    objectArray[i] = objectArray[i].split('/');
}

【讨论】:

    【解决方案2】:

    可能的方法,使用Array#forEach

    let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james".split(', '), obj = {};
    
    myStr.forEach(function(v){
       (obj[v.split('/')[0]] || (obj[v.split('/')[0]] = [])).push(...v.split('/').slice(1));
    });
    
    console.log(obj);

    【讨论】:

      【解决方案3】:

      您可以使用split() 获取元素数组,然后在该数组上使用reduce() 来构建对象。

      let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";
      
      var result = myStr.split(', ').reduce(function(r, a) {
        var e = a.split('/');
        if (!r[e[0]]) r[e[0]] = []
        r[e[0]].push(...e.slice(1));
        return r
      }, {})
      
      console.log(result)

      【讨论】:

        【解决方案4】:

        您可以将字符串拆分为组,然后拆分为值。将第一个作为值的键并将值连接到旧项目或新数组。然后将其分配给带有键的对象。

        var string = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james",
            result = {};
            
        string.split(', ').forEach(function (a) {
            var values = a.split('/'),
                key = values.shift();
            result[key] = (result[key] || []).concat(values);
        });
        
        console.log(result);
        .as-console-wrapper { max-height: 100% !important; top: 0; }

        【讨论】:

        • 非常感谢,您让它变得非常简单易懂。这正是我想要的!
        【解决方案5】:

        你可以这样做:

        let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";
        
        var obj = myStr.split(", ").reduce((ret, val) => {
           var arr = val.split("/");
           if(ret[arr[0]]){
             ret[arr[0]].push(...arr.filter((v, i) => i!=0));    
           }else{
             ret[arr[0]] = arr.filter((v, i) => i!=0);
           }
           return ret;
        }, {});
        console.log(obj);

        【讨论】:

          【解决方案6】:

          let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";
          
          let res = myStr.split(', ').reduce((acc, s) => {
            let parts = s.split('/'),
                cat = parts.shift();
            if(acc[cat])
              acc[cat] = acc[cat].concat(parts);
            else
              acc[cat] = parts;
            return acc;
          }, {});
          
          console.log(res);

          【讨论】:

            【解决方案7】:

            let myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";
            let output = {};
            
            myStr.replace(/\s*,\s*/gi, ",").split(",").forEach(item => {
            let itemArr = item.split("/");
            
            if (itemArr && itemArr.length) {
                var key = itemArr[0];
            
                output[key] = (output.hasOwnProperty(key)) ?
                    output[key].concat(itemArr.slice(1, itemArr.length)) : itemArr.slice(1, itemArr.length);
            
            }
              
            });
            
            console.log(output);

            【讨论】:

              【解决方案8】:
              var myStr = "dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james";
              var Arr = myStr.split(', ');
              var keyJSON = new Array();
              $.each(Arr,function(i,o){
              var key = o.split('/')[0];
              keyJSON.push(key);
              $.unique(keyJSON);
              });
              var finalArr = new Array();
              $.each(keyJSON,function(keyI,keyO){
                  finalArr[keyO] = new Array();
              });
              $.each(Arr,function(i,o){
                  var innerArr = o.split('/');
                  for(var ind=1;ind<innerArr.length;ind++){
                      finalArr[innerArr[0]].push(innerArr[ind]);
                  }
              });
              

              【讨论】:

              • 试一下代码finalArr数组变量是用来按预期存储final的
              猜你喜欢
              • 1970-01-01
              • 2021-12-13
              • 2020-05-21
              • 2011-06-18
              • 2019-05-19
              相关资源
              最近更新 更多