将对象字符串转换为对象

时间:2017-08-25 17:57:48

标签: javascript jquery arrays object underscore.js

我有下面的对象字符串,如下所示。

[0,5]
   0: "A123  G  2323232"
   1: "F345  G  345667"
   2: "T677  G  -34343"
   3: "G454  G  4343"
   4: ""

如您所见,“A123 G 2323232”是一个字符串,其中包含制表符分隔值。

我想得到如下的最终输出。

[0,4]
   0: 
     UserId:A123
     Type:  G
     Values: 2323232
   1: 
     UserId: F345  
     Type:  G
     Values: 345667
   2: 
     UserId: T677  
     Type:  G
     Values: -34343
   3: 
     UserId: G454  
     Type:  G
     Values: 4343

请注意。第4个元素是空字符串。所以它不应该转换为最终数据。

任何人都可以建议如何将其分发给不同的元素。

4 个答案:

答案 0 :(得分:3)

您可以将每个字符串拆分为各自的数据片段,然后将这些片段映射到具有所需属性的对象中。这就是它的样子:

var data = ["A123  G  2323232","F345  G  345667","T677  G  -34343","G454  G  4343", ""];
/* ES6 Syntax */
var objects = data.filter(str => str !== "").map(function (str) {
  var [UserId, Type, Values] = str.split("  ");
  return { UserId, Type, Values };
});

/* ES5 Syntax */
var objectsES5 = data.filter(function (str) {
  return str !== "";
}).map(function (str) {
  var split = str.split("  ");
  return {
    UserId: split[0],
    Type: split[1],
    Values: split[2]
  };
});

console.log(objects);

答案 1 :(得分:3)

您可以匹配非空间部分并将数组解构为所需属性并返回一个对象。



var data = ["A123  G  2323232", "F345  G  345667", "T677  G  -34343", "G454  G  4343", ""],
    result = data
        .filter(Boolean)
        .map(s => {
            var [UserId, Type, Values] = s.match(/[^ ]+/g);
            return { UserId, Type, Values };
        });
                
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 2 :(得分:1)

使用reducesplit的组合:

var strings = [
  "A123	G	2323232",
  "F345	G	345667",
  "T677	G	-34343",
  "G454	G	4343",
  ""
];

var result = strings.reduce(function(res, str) {  // for each string in strings arrays
  var parts = str.split("\t");                    // split the string by tabs
  if(parts.length === 3) {                        // if the string is valid (the splitting yielded 3 parts)
    res.push({                                    // then add an object to the result array using the parts we got
      UserID: parts[0],
      Type: parts[1],
      Values: parts[2]
    });
  }
  return res;
}, []);

console.log(result);

答案 3 :(得分:1)

您可以使用javascript filter()map()等方法执行此操作。

var array = ["A123  G  2323232",
             "F345  G  345667",
             "T677  G  -34343",
             "G454  G  4343",
             ""];

var result = array.filter(function(item) {
  return item.trim();
}).map(function(item) {
  var split = item.split('  ');
  
  return {
    UserId: split[0],
    Type: split[1],
    Values: split[2]
  };
});

console.log(result);