【问题标题】:JS Array - Check for object value duplicateJS 数组 - 检查对象值是否重复
【发布时间】:2023-03-18 16:23:01
【问题描述】:

我有一个数组,可以将电子表格中的所有数据放入 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++;

  }

【问题讨论】:

  • 如果名称是唯一的,您可以将它们用作以数组作为值的对象中的键。然后,您可以检查密钥是否存在以及是否没有创建它并将主题添加到数组中,否则将附加主题添加到数组中。
  • 你可以利用jQuery的$.inArray(api.jquery.com/jQuery.inArray)函数在填充数组之前确定名字是否已经在数组中。
  • student.name 似乎几乎可以肯定随着时间的推移不会是唯一的

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我们可以在另一个数组的帮助下做到这一点。下面的代码可以帮助你...

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

    【讨论】:

    • 请注意 不支持Array.prototype.indexOf()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多