2017-08-25 166 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);