2016-11-09 2 views
2

Ich überprüft für verwandte Beiträge, konnte aber keine finden. Es gibt kein Problem mit der Zeichenfolge, aber ich kann nicht herausfinden, wie ich es implementieren soll.
Ich muss die folgende Zeichenfolge in ein Objekt konvertieren.Erstellen eines Arrays mit einer Zeichenfolge, die den Schlüssel und den Wert der Eigenschaften enthält

var a ="Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False"; 

In

[ 
    { 
    "Integer":1, 
    "Float":2.0 
    }, 
    { 
    "Boolean":true, 
    "Integer":6 
    }, 
    { 
    "Float":3.66, 
    "Boolean":false 
    } 
] 
+0

Zunächst einmal, dass der erste Codeblock von Ihnen ist JavaScript nicht gültig. So funktionieren Multiline-Strings nicht in JS. – Cerbrus

+0

var a = "Ganzzahl, 1 Gleitkommazahl, 2.0 \ nBoolean, Wahre Ganzzahl, 6 \ nFloat, 3.66 Boolesch, Falsch"; – wolfsbane

Antwort

-1

Sorry für meine vorherige Antwort. Ich habe die Frage nicht sorgfältig gelesen. Ich habe einige Hilfe von Cerbrus Antwort genommen und kann immer noch nicht sein Niveau bravo. Ich habe es einfach gemacht, weil ich nur einfach weiß.

var obj = {}; 
 
var arr = [] 
 
var a ="Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False"; 
 
var aArray = a.split('\n') 
 
for(var i=0 ; i < aArray.length; i++) 
 
     { 
 
      
 
      lilArray = aArray[i].split(" "); 
 
      lillilArray1 = lilArray[0].split(','); 
 
      lillilArray2 = lilArray[1].split(','); 
 
      lla11  = lillilArray1[0]; 
 
      lla12  = lillilArray1[1]; 
 
      lla21  = lillilArray2[0]; 
 
      lla22  = lillilArray2[1]; 
 
      if(lla11 == "Boolean") 
 
       obj[lla11] = lla12 === 'True'; 
 
      else 
 
       obj[lla11] = Number(lla12); 
 
      if(lla21 == "Boolean") 
 
       obj[lla21] = lla22 === 'True'; 
 
      else 
 
       obj[lla21] = Number(lla22); 
 
      arr.push(obj); 
 
      obj={}; 
 
     } 
 
    console.log(arr);

0

Das wird der Trick:

var a = "Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False"; 
 

 
var result = a.split('\n').map(function(item) { // Iterate over all objects 
 
    var row = {}; 
 
    item.split(' ') 
 
    .forEach(function(pair) {    // For each key/value pair in the current object 
 
     var data = pair.split(',');   // Separate the key from the value 
 

 
     if (data[0] === 'Boolean')   // If the current value is a boolean: 
 
     row[data[0]] = data[1] === 'True'; // Get the proper boolean value 
 
     else         // Otherwise: 
 
     row[data[0]] = Number(data[1]); // Get the numeric value. 
 
    }); 
 

 
    return row; 
 
}); 
 

 
console.log(result);

0

Sie ein Objekt für eine bessere Umwandlung Typen auf den Typ Sie benötigen, verwenden könnte, die ist leicht für neue Typen zu pflegen.

var a = "Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False", 
 
    types = { 
 
     Integer: function (v) { return +v; }, 
 
     Float: function (v) { return +v; }, 
 
     Boolean: function (v) { return { True: true, False: false }[v]; }, 
 
     default: function (v) { return v; } 
 
    }, 
 
    result = a.split('\n').map(function (row) { 
 
     o = {}; 
 
     row.split(' ').forEach(function (item) { 
 
      var data = item.split(','); 
 
      o[data[0]] = (types[data[0]] || types.default)(data[1]); 
 
     }); 
 
     return o; 
 
    }); 
 

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

0

Sie möglicherweise wie folgt könnte genauso gut tun;

var s ="Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False", 
 
    a = s.split("\n") 
 
     .map(o => o.match(/([a-zA-Z]+),([\w\.]+)/g) 
 
        .reduce(function(p,c){ 
 
        \t  var pv = c.split(","); 
 
        \t  return Object.assign(p,{[pv[0]]: +pv[1] ? +pv[1] : pv[1] !== "False"}); 
 
          }, {})); 
 
console.log(a);

0

ersten benötigen Sie einen guten Weg, um den erwarteten Text zu analysieren. Für das, was Sie zur Verfügung gestellt haben, habe ich eine Lösung gefunden.

var jsonString = "Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False"; 
 
var keyValArray = jsonString.split(/[\n]/g); 
 
// Need to parse the string. 
 
var result = []; 
 
// result object to keep new object. 
 
keyValArray.forEach(function(kv, i, a) { 
 
    let obj = {}; 
 
    kv.split(' ').forEach(function(k) { 
 
    var key = k.split(',')[0]; 
 
    let val = k.split(',')[1]; 
 
    
 
    if(isNaN(val)) { 
 
     val = val.toLowerCase() === "true" ? true : false; 
 
    } else { 
 
     val = Number(val); 
 
    } 
 
    
 
    obj[key] = val; 
 
    }); 
 
    result.push(obj); 
 
}); 
 

 
console.log('result : '); 
 
console.info(result);

Verwandte Themen