使用JavaScript将字符串转换为对象
我想知道在JavaScript中将这个字符串转换为对象的最有效方法 这是丑陋的字符串:使用JavaScript将字符串转换为对象,javascript,arrays,string,object,Javascript,Arrays,String,Object,我想知道在JavaScript中将这个字符串转换为对象的最有效方法 这是丑陋的字符串: "\"date\",\"initRegistrations\",\"registrations\",\"finalizeRegistrations\"\r\n\"03/29/2017\",\"0\",\"0\",\"0\"\r\n\"03/30/2017\",\"5\",\"4\",\"4\"\r\n\"03/31/2017\",\"42\",\"0\",\"0\"\r\n\"04/01/2017\",\
"\"date\",\"initRegistrations\",\"registrations\",\"finalizeRegistrations\"\r\n\"03/29/2017\",\"0\",\"0\",\"0\"\r\n\"03/30/2017\",\"5\",\"4\",\"4\"\r\n\"03/31/2017\",\"42\",\"0\",\"0\"\r\n\"04/01/2017\",\"192\",\"0\",\"0\"\r\n\"04/02/2017\",\"4\",\"0\",\"0\"\r\n\"04/03/2017\",\"23\",\"0\",\"0\"\r\n\"04/04/2017\",\"5\",\"0\",\"0\"\r\n"
目前我正在使用此函数,但它不能正常工作,预期的输出将是一个对象对象,其键为date、initRegistrations、registrations、finalizerregistrations:
function convertToArrayOfObjects(data) {
var keys = data.shift(),
i = 0, k = 0,
obj = null,
output = [];
for (i = 0; i < data.length; i++) {
obj = {};
for (k = 0; k < keys.length; k++) {
if(data[i][k]){
obj[keys[k]] = data[i][k];
}
}
output.push(obj);
}
return output;
}
函数转换为ArrayOfo对象(数据){
var keys=data.shift(),
i=0,k=0,
obj=null,
输出=[];
对于(i=0;i
有没有什么新奇的方法可以轻松实现这一点,或者我应该去玩我的对象数组?
任何帮助或建议都将不胜感激。
谢谢。您可能正在寻找由字符串组成数组的拆分:
var a = s.split("\r\n");
这将为您提供字符串所包含的行数组。然后,如果您需要每行中的字段,您可以在for循环中使用另一个分隔符(逗号?)进一步拆分
var tbl=[];
var rows = s.split("\r\n");
for(var y in rows) {
var row = rows[y].split('"');
tbl.push(row);
}
这将为您提供一个数组。您只需付出最小的努力,就可以识别具有字段名的标题行,然后将它们用作每行的键。(注意:我现在正在移动设备上,所以这是我能为您做的最好的事情,但如果您仍然迷路,我可以稍后向您展示一个更详细的示例。)您可能正在寻找由字符串组成数组的拆分:
var a = s.split("\r\n");
这将为您提供字符串所包含的行数组。然后,如果您需要每行中的字段,您可以在for循环中使用另一个分隔符(逗号?)进一步拆分
var tbl=[];
var rows = s.split("\r\n");
for(var y in rows) {
var row = rows[y].split('"');
tbl.push(row);
}
这将为您提供一个数组。您只需付出最小的努力,就可以识别具有字段名的标题行,然后将它们用作每行的键。(注意:我现在正在使用移动设备,所以这是我能为您做的最好的事情,但如果您仍然迷路,我可以稍后向您展示一个更详细的示例。)可能对某些人来说太实用了,但我会这样写 “注册”和“最终注册”的“最终注册”的“最终注册”的“最终注册”的“3/29/2017年3/29/2017”的,“0”的“0”的“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的“0”,以及“0”的“0,“0”的,“0”的,“0”的,”,”,”,”0,“0,“0,”,”,”,”0,“0,”0,”0,”0,“0”,0,”0,”0,”0,”0,“0”,0,”0,”0,”0,”0,”0,“0,”0,”0,”0,”0,”0,”0,”0,”0,”0,“0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”\“\r\n\“04/03/2017\”、“23\”、“0\”、“0\”\r\n\“04/04/2017\”、“5\”、“0\”、“0”\“\r\n”; //从字符串中删除周围的引号。 const removeQuotes=s=>s.replace(/^“|“$/g,”); //按换行符拆分输入(“\r\n”) 常量行=s.trim().split('\r\n'); //获取标题(输入的第一行)并删除引号。 常量标头=行[0]。拆分(',')。映射(removeQuotes) //字符串的其余部分是数据。按逗号拆分并删除引号。 const data=lines.splice(1.map)(line=>line.split(',').map(removeQuotes)); //给定标题行和数据行,合并为一个对象。 const zipWith=标题=>行=>{ 返回页眉.reduce((地图、项目、索引)=>{ 图[项]=行[索引]; 返回图; }, {}); } //现在使用地图处理所有数据:) const result=data.map(zipWith(header));
console.log(result);对某些人来说可能太实用了,但我会这样写 “注册”和“最终注册”的“最终注册”的“最终注册”的“最终注册”的“3/29/2017年3/29/2017”的,“0”的“0”的“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的,“0”的“0”的“0”,以及“0”的“0,“0”的,“0”的,“0”的,”,”,”,”0,“0,“0,”,”,”,”0,“0,”0,”0,”0,“0”,0,”0,”0,”0,”0,“0”,0,”0,”0,”0,”0,”0,“0,”0,”0,”0,”0,”0,”0,”0,”0,”0,“0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”0,”\“\r\n\“04/03/2017\”、“23\”、“0\”、“0\”\r\n\“04/04/2017\”、“5\”、“0\”、“0\”\r\n“; //从字符串中删除周围的引号。 const removeQuotes=s=>s.replace(/^“|“$/g,”); //按换行符拆分输入(“\r\n”) 常量行=s.trim().split('\r\n'); //获取标题(输入的第一行)并删除引号。 常量标头=行[0]。拆分(',')。映射(removeQuotes) //字符串的其余部分是数据。按逗号拆分并删除引号。 const data=lines.splice(1.map)(line=>line.split(',').map(removeQuotes)); //给定标题行和数据行,合并为一个对象。 const zipWith=标题=>行=>{ 返回页眉.reduce((地图、项目、索引)=>{ 图[项]=行[索引]; 返回图; }, {}); } //现在使用地图处理所有数据:) const result=data.map(zipWith(header));
console.log(result);您的“丑陋字符串”是字符串的文字内容还是字符串文字?该字符串的预期输出是什么?“工作不正常”“它应该如何工作?预期和实现的输出是什么?这些数据来自哪里?它看起来像CSV,或者说带有双引号和行尾的CSV逃过了la JSON。如果你知道某个东西是如何编码的,那么解码就容易多了。你指定了输入,现在请指定所需的输出是你的“丑陋字符串”字符串的文字内容还是字符串文字?你对该字符串的预期输出是什么?“工作不正常”,它应该如何工作?预期和实现的输出是什么?这些数据来自哪里?它看起来像CSV,或者说带有双引号和行尾的CSV逃过了la JSON。如果你知道它是如何编码的,那么解码就容易多了。你指定了输入,现在请指定所需的outputhi@dkellner谢谢你的帮助,这只是构建了一个字符串数组。我认为完美的东西应该是一个对象的对象,或者一个对象的数组。瞧,再近一步。嗨@dkellner谢谢你的帮助,这只是构建了一个字符串数组。我认为完美的东西应该是一个物体或一系列物体。瞧,再近一步。真棒的东西@Triptych,奇妙的解决方案@维克多,谢谢!在这一点上,这个代码比其他答案更简单。函数式编程完全值得投资=)很棒的东西@Triptych,奇妙的解决方案@维克多,谢谢!在这一点上,这段代码对我来说更简单