2017-08-25 71 views
0

我有下面这个对象的字符串,如下所示。将对象的字符串转换为对象的元素

[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 

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

任何人都可以请建议如何分配这个不同的元素。

+1

独立你的字符串使用[分裂()](HTTP:// HTTP://jsfiddle.net/K3D6d/5/)功能然后追加该结果到特定的ID。 –

+0

@ MaulikBhatt-你可以给我一个例子,我可以看看 – Rihana

+0

看到这个[示例](http://jsfiddle.net/mkn5vojt/) –

回答

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; }

1

使用的reducesplit组合:

var strings = [ 
 
    "A123 \t G \t 2323232", 
 
    "F345 \t G \t 345667", 
 
    "T677 \t G \t -34343", 
 
    "G454 \t G \t 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);

+0

我跑了这段代码被剪掉了。给了我一个空阵列.. – Rihana

+0

@Rihana我很难复制你的字符串没有标签'\ t'在他们。固定。 –

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);

+0

'map'不起作用。那么在原始数组末尾的空字符串呢? –

+1

@ibrahimmahrir错过了,谢谢。 Nina的解决方案通过'.filter(布尔)'增加了这一点。这可能是最好的方式,但为了不复制她的想法,我会过滤空字符串。 – mhodges

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);