均匀地将数组的内容分配给多个行

时间:2017-10-02 18:36:18

标签: javascript arrays google-apps-script

我目前正在使用Google Apps脚本,并且希望尽可能均匀地分发数组(例如['MP', 'JE', 'MC', 'GP', 'CZ', 'DM', 'MD'])以对应多个电子表格行。

假设有21行,我正在使用上面的长度为7的数组。我想迭代遍历数组的每个条目并输出每个条目3次。

看似简单易行:

var exampleArr = ['MP', 'JE', 'MC', 'GP', 'CZ', 'DM', 'MD'];

function distributeArr(arr, rowLen){
  for (i = 0; n = arr.length, i < n; i++){
    for (r = 0; r < rowLen / n; r++) {
      console.log(arr[i]);
    }
  }
}

distributeArr(exampleArr, 21);

但是当两个数字不能被完全整除时,它会向上舍入到最接近的匹配。在尽可能保持数组项分布到行的同时处理这个问题的好方法是什么?

1 个答案:

答案 0 :(得分:2)

一种方法是获取剩余部分并将其分发给员工。

function distributeArr(staffArr, numOfTasks){
  var numOfStaff = staffArr.length;
  var extra = numOfTasks % numOfStaff;
  var taskPerPerson = parseInt(numOfTasks/numOfStaff);
  var assignment = staffArr.map(function(e){
    if(staffArr.indexOf(e) < extra){
      return [e, taskPerPerson + 1];
      }else{
      return [e, taskPerPerson];
      }
  });

  assignment.forEach(function(arr){
    //create arr[1] rows for staff arr[0]
  })
}

var staffArr = ['MP', 'JE', 'MC'];
distributeArr(staffArr, 7); //assignment: [["MP", 3], ["JE", 2], ["MC", 2]]
distributeArr(staffArr, 6); //assignment: [["MP", 2], ["JE", 2], ["MC", 2]]
distributeArr(staffArr, 0); //assignment: [["MP", 0], ["JE", 0], ["MC", 0]]
distributeArr(staffArr, 1); //assignment: [["MP", 1], ["JE", 0], ["MC", 0]]