【问题标题】:Convert serialized data to array or object将序列化数据转换为数组或对象
【发布时间】:2017-04-01 18:30:12
【问题描述】:

我有一个这样的字符串:

(redMultiplier=0, greenMultiplier=0, blueMultiplier=0, alphaMultiplier=1, redOffset=0, greenOffset=102, blueOffset=51, alphaOffset=0)

我需要将此字符串转换为数组(或对象)。而且我也有很多这样的字符串要转换为数组。有没有办法自动将这样的字符串转换为javascript数组?

【问题讨论】:

  • 你能显示预期的输出吗?数组会是什么样子?
  • 输出可以是这样的对象:{redMultiplier:0, greenMultiplier:0 ... };,因为如果我没记错的话,命名数组索引在 js 中不起作用。

标签: javascript arrays object serialization


【解决方案1】:

您可以使用正则表达式。

var str = '(redMultiplier=0, greenMultiplier=0, blueMultiplier=0, alphaMultiplier=1, redOffset=0, greenOffset=102, blueOffset=51, alphaOffset=0)'

var obj = {};

str.replace(/(\w+)=(\d+)/g, function (match, $1, $2){ 
    obj[$1] = parseInt($2);
});

console.log(obj);

【讨论】:

    【解决方案2】:

    这里是如何转换成array

    var str = "(redMultiplier=0, greenMultiplier=0, blueMultiplier=0, alphaMultiplier=1, redOffset=0, greenOffset=102, blueOffset=51, alphaOffset=0)".replace(/[()]/g, '');
    console.log(str.split(','));
    var newArr = str.split(',');
    var finalArr = [];
    newArr.map((elem) => {
        finalArr.push( elem.replace('=', ':') );
    });
    
    console.log(finalArr);
    

    【讨论】:

      【解决方案3】:

      当您将字符串作为参数传输时,此函数将返回一个对象:

      function convert(str){
          str = str.replace(/\(|\)/g,'');
          var arr = str.split(',');
          var obj = {};
          for (var i = 0; i < arr.length; i++) {
            var singleArr = arr[i].trim().split('=');
            var name = singleArr[0];
            var value = singleArr[1]-0;
            if (obj[name] == undefined) {
              obj[name] = value;
            }
          }
          return obj;
        }
      

      object {redMultiplier: 0, greenMultiplier: 0, blueMultiplier: 0, alphaMultiplier: 1}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2018-10-05
        • 2020-12-19
        • 1970-01-01
        • 2014-06-10
        • 2020-04-11
        • 2014-03-24
        相关资源
        最近更新 更多