Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组的内容均匀分布到多行_Javascript_Arrays_Google Apps Script - Fatal编程技术网

Javascript 将数组的内容均匀分布到多行

Javascript 将数组的内容均匀分布到多行,javascript,arrays,google-apps-script,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

我目前正在使用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);
var exampleArr=['MP','JE','MC','GP','CZ','DM','MD'];
功能分配器(arr、rowLen){
对于(i=0;n=arr.length,i

但当这两个数字不能被平均整除时,它将取整到最接近的匹配。在尽可能均匀地将数组项分配到行的同时,处理此问题的好方法是什么?

一种方法是获取剩余项并将其分配给员工

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]]
函数分发器(staffArr、numotasks){
var numostaff=staffArr.length;
var extra=numOfTasks%numOfStaff;
var taskPerPerson=parseInt(numOfTasks/numOfStaff);
var赋值=statfarr.map(函数(e){
if(斯塔法尔指数(e)<额外){
返回[e,taskPerPerson+1];
}
否则{
返回[e,任务人];
}
});
赋值.forEach(函数(arr){
//为员工arr[0]创建arr[1]行
});
}
var staffArr=['MP','JE','MC'];
经销商(斯塔法尔,7)//作业:[“MP”,3],“JE”,2],“MC”,2]]
经销商(斯塔法尔,6)//作业:[“MP”,2],“JE”,2],“MC”,2]]
分销商(斯塔法尔,0)//作业:[“MP”,0],“JE”,0],“MC”,0]]
经销商(斯塔法尔,1)//分配:[“MP”,1],“JE”,0],“MC”,0]]

当行数不能被数组长度数整除时,您希望得到什么结果?假设21行,数组长度为8?@EJ2015可能每个条目输出3次,但最后3次除外,后者每次只得到两个结果。基本上,我试图尽可能均匀地使用缩写来分配任务职责。有时,员工的工作量会比其他人多一点,但随着时间的推移,工作量会趋于平衡。随着时间的推移,如果最后几个人的工作量总是相同或更少,那么可能不会达到平衡。@EJ105阵列在分配任务之前会经历Fisher-Yates洗牌,因此我不太担心阵列末尾的偏差。但我愿意接受任何想法。只是我不能在这里找到一个好的解决方案。看起来很棒!你能用
var assignment
详细介绍一下匿名函数中发生了什么吗?你用
numOfTasks
numOfStaff
划分
taskperperperperson
加上
额外的
(剩余部分)。因此,匿名函数只需在第一批
额外的
工作人员中再添加一个任务,以平均分配任务,然后剩余的任务将由
taskPerPerson
分配。