我检查过任何相关的帖子,但找不到任何相关的帖子。字符串没有问题,但我无法弄清楚如何实现它 我需要将以下字符串转换为对象。
var a ="Integer,1 Float,2.0\nBoolean,True Integer,6\nFloat,3.66 Boolean,False";
向
[
{
"Integer":1,
"Float":2.0
},
{
"Boolean":true,
"Integer":6
},
{
"Float":3.66,
"Boolean":false
}
]
答案 0 :(得分:0)
这就是诀窍:
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);
答案 1 :(得分:0)
您可以使用对象更好地将类型转换为您需要的类型,这对于新类型很容易维护。
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; }
答案 2 :(得分:0)
你也可以这样做;
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){
var pv = c.split(",");
return Object.assign(p,{[pv[0]]: +pv[1] ? +pv[1] : pv[1] !== "False"});
}, {}));
console.log(a);
答案 3 :(得分:0)
首先,您需要一种解析预期文本的好方法。 对于你提供的内容,我提出了一个解决方案。
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);

答案 4 :(得分:-1)
对不起我之前的回答。我没有仔细阅读这个问题。我从Cerbrus的回答中得到了一些帮助,但仍然无法与他的等级 bravo 相匹配。我做得很简单,因为我只知道简单。
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);
&#13;