Javascript 将JS数组转换为单个对象

Javascript 将JS数组转换为单个对象,javascript,arrays,object,Javascript,Arrays,Object,我是JS的新手,在搜索中还没有找到答案,所以我希望有人能帮我 我有一个csv,我把它解析成一个数组。 看起来像这样 ["Teacher 1", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"] ["Teacher 2", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"] 等等 我想把它分解成如下的对象和数组 Var Teacher1 =

我是JS的新手,在搜索中还没有找到答案,所以我希望有人能帮我

我有一个csv,我把它解析成一个数组。 看起来像这样

["Teacher 1", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"]
["Teacher 2", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"]
等等

我想把它分解成如下的对象和数组

Var Teacher1 = new Teacher("Teacher1");
Teacher1.students = [Student1, Student2, Student3, Student4, Student5];

如果有人能把我引向正确的方向,我将非常感激

通常,您应该更喜欢使用对象和数组文本,而不是“new”语法。例如,行是原始数组的位置:

// map takes an array and returns and modifies each object, passed
// as the parameter d
rows.map(function(d){
    return {
        teacher: d[0],
        students: d.slice(1)
    };

});
应该返回表单的对象列表

[
  {teacher: 'Teacher 1', students: ['Student 1', 'Student 2',...']},
]
更多信息

这里有一个


编辑: 在您给出的示例中,您使用构造函数创建具有“new”语法的对象。您可以像这样创建一个构造函数

function Teacher(name){
  this.name = name;
}
所以当你打电话的时候

var teacher = new Teacher('teacher 1')
可以使用name属性创建教师对象。因为这只是一个对象,所以可以向它添加任何属性,如.students

但是,您也可以通过仅声明一个对象文字来获得相同的结果,即

var teacher = {};  //an empty object
然后为其指定属性

teacher.name = 'teacher 1';
teacher.students = ['student 1', ...]
或者你甚至可以一步到位

var teacher = {
  name: 'teacher 1',
  students: ['student 1',' student 2',...']
};
最后,您可以创建一个函数,该函数接受一个数组并返回这个教师对象

function example(item) {
  // where item is an array
  return {
     name: item[0],
     students: item.slice(1)  // takes all the array elements after 0
  };
}
然后使用.map将该函数映射到数组中的每个元素,您将得到一个教师对象数组

如果您想使用构造函数,可以使用

function Teacher(name, students) {
  this.name = name;
  this.students = students;
}
然后使用

rows.map(function(d){
  return new Teacher(d[0], d.slice(1));
});

但是,结果将与对象文字表示法相同,而不会对您已经进行的设置做太多更改:

var myProcessedCSV = [
    ["Teacher 1", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"]
    ["Teacher 2", "Student 1", "Student 2", "Student 3", "Student 4", "Student 5"]
]

// start the processing
myProcessedCSV.forEach(processCSVRow);

// this function takes a single row and instantiates a Teacher object
// with it
function processCSVRow(row){
     // this extracts the teacher's name (the first data in the row)
     var teacherName = row.shift();
     var teacher = new Teacher(teacherName);
     // all the remaining data points in the row are students, so we 
     // can simply use 'row' here
     teacher.students = row;
}
如果需要教师实例数组供以后使用,请使用“map”而不是“forEach”,并在“processCSVRow”函数末尾返回教师变量,以教师实例数组结束


这里给出的一些其他建议是很好的考虑。

为什么不只是一个有一组老师的对象:[学生数组]关键配对?请向我们展示CSV到数组数组中的代码。谢谢你的答案!所以在我的问题中有24个教师->学生组合。有没有办法在数组中循环创建类似于答案第一部分的内容{teacher:'teacher 1',Student:['Student 1','Student 2',…']}。。对于每一位老师?它是在上面的数组中吗?试着为行插入上面的函数这里是一个代码笔,在js控制台中运行它-@user5424235如果你知道老师总是每个数组中的第一个对象,你可以在一个简单的循环中为每个数组重复这个过程(一个循环将根据你拥有的数组数运行)嘿,非常感谢这个答案!事实上,它确实满足了我的需求,但在我看到它之前,我已经将上面的答案塑造成了我的需求。