Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript将字符串转换为对象_Javascript_Arrays_String_Object - Fatal编程技术网

使用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\",\

我想知道在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\",\"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,奇妙的解决方案@维克多,谢谢!在这一点上,这段代码对我来说更简单