将JS数组转换为单个对象

时间:2015-10-08 17:06:04

标签: 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 = new Teacher("Teacher1");
Teacher1.students = [Student1, Student2, Student3, Student4, Student5];

如果有人能引导我朝着正确的方向前进,我会非常感激!

2 个答案:

答案 0 :(得分:1)

通常,您应该更喜欢使用对象和数组文字而不是“新”语法。例如,哪个行是原始数组:

// 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',...']},
]

有关map的更多信息。

这里是example

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

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;
}

然后代替map中的现有函数,使用

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

但结果与对象文字符号

相同

答案 1 :(得分:0)

没有太多改变你已经有这个设置的方式:

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;
}

如果您需要一个Teacher实例数组供以后使用,请使用“map”而不是“forEach”并返回“processCSVRow”函数末尾的teacher变量,最后得到一个Teacher实例数组< / p>

这里提出的其他一些建议值得考虑。