JS Array - 检查对象值是否重复

时间:2015-04-08 10:20:13

标签: javascript google-apps-script google-spreadsheet-api

我有一个数组,可以将电子表格中的所有数据投入到studentCCAList中。 但是,有些学生有多个科目。

以下是日志的示例

姓名:约瑟夫
主题:英语

姓名:彼得
数学

姓名:约瑟夫
主题:科学

在这种情况下,我如何确保Joseph没有插入2个阵列? 正确的应该是

姓名:约瑟夫
主题:英语,科学

var studentDataList = [];
var studentCount = 0;

for (var i = 0; i < sheetData.length; ++i) {
    var row = sheetData[i];
    var studentName = row[0];
    var studentSubject = row[1];

    studentDataList[studentCount] = {};
    studentDataList[studentCount].subject = studentSubject;
    studentDataList[studentCount].name = studentName;
    studentCount++;

  }

2 个答案:

答案 0 :(得分:2)

此代码将以更有效的方式完成工作

var studentDataList = [];
var sheetData = [['Foo','math'],['Foo','science'],['Foo1','math']];
var pushData = function(obj, arr){
    for(var i =0; i<arr.length; i++ ){
        if(arr[i].name === obj.name){
           arr[i].subject+= ', '+obj.subject;
           return;
        }
    }
    arr.push(obj);
}
for (var i = 0; i < sheetData.length; i++) {
    var row = sheetData[i];
    pushData({
        name: row[0],
        subject: row[1]
      },studentDataList);
}

答案 1 :(得分:1)

我们可以借助一个阵列来做到这一点。下面的代码可以帮助你...

var studentDataList = [];
var studentTrack = []; //array which prevents the duplicate values

for (var i = 0; i < sheetData.length; ++i) {
    var row = sheetData[i];
    var studentName = row[0];
    var studentSubject = row[1];

    var index = studentTrack.indexOf(studentName);

    if(index == -1){
      studentDataList.push({
        name: studentName,
        subject: studentSubject
      });

      studentTrack.push(studentName);
    }else{
      studentDataList[index].subject += ", "+studentSubject;
    }

}