Javascript 如何计算多维数组的值

Javascript 如何计算多维数组的值,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个大字符串数组,如: var array = [["worker ", "department", "2", "6", "8", "3", "1", "12", ... , 14] ["1", "Duty/Not", "1", "0", "1", "0", "0", "1", ..., "0"] ["worker ", "department", "11", "10", "11", "3", ..., "7"] ["2

我有一个大字符串数组,如:

var array = [["worker ", "department", "2", "6", "8", "3", "1", "12", ... , 14]
            ["1", "Duty/Not", "1", "0", "1", "0", "0", "1", ..., "0"]
            ["worker ", "department", "11", "10", "11", "3", ..., "7"]
            ["2", "Duty/Not", "0", "1", "1", "1", "1", "1", ..., "1"]];
在这个数组中,数组行的每个数组都有15000个元素,并且前两个子数组和其他子数组之间存在关系。例如,第一行包含第一个员工所在的部门。否则,第二行包含第一个工人的职责,或不使用1或0表示

我想计算员工被分配到哪个部门的次数。

我试着用循环数数。然而,这需要很长时间

编辑:

我实现的一部分

   //Reading and parsing from csv file
    d3.text("worker.csv", function(text) {
       var data = d3.csvParseRows(text).map(function(row) {
           return row.map(function(string) {
       return string;
       });
   });


//Concatination 
   var concatArray = [].concat(...data);
//console.log(concatArray);
//从数组中删除NULL
var filteredAry=concatArray.filter(函数(e){returne!=“”});
控制台日志(filteredAry)

现在,我的问题几乎和以前一样。我想将部门ID映射到每个员工的分配次数。例如,预期输出如下


输出=(1,0),(2,3),(3,1),(4,2),(5,0),(6,1).

我不太清楚您在这里想要实现什么,但这里有几个问题需要您思考:

  • 你介意分享你的代码吗,这样我们就可以更好地了解你在这里想要实现什么
  • 您在哪里检索此数据?您是按原样提供此二维阵列还是创建了它?如果您是生成阵列的人,那么优化阵列的一种方法是使用不同的数据结构。如果按原样提供数组,则必须至少循环一次所有元素(即
    15000个条目/行*行数
    ),以将其转换为不同的数据结构
  • 你想数到多少次?这是一次性的还是重复的任务?如果这是一个重复的任务,我建议缓存最终的数据结构,或者将其视为一个全局值,这样您就不必每次都需要计算计数
  • 我解决了这个问题

    解决方案:

    var count = [], i, value, total = 0;
    for (i = 0; i < array.length; i++) {
        value = array[i];
        if (typeof count[value] === "undefined") {
            count[value] = 1;
    
        } else {
            count[value]++;
    
        }
    }
    
    var count=[],i,value,total=0;
    对于(i=0;i
    这已经解决了,但是对于您的原始问题,应该有一个更快的解决方案,那就是:

    //测试数据
    风险值数据=[“工人”、“部门”、“2”、“6”、“8”、“3”、“1”、“12”、11],
    [“1”、“职责/非”、“1”、“0”、“1”、“0”、“0”、“1”、“0”],
    [“工人”、“部门”、“11”、“10”、“11”、“3”、“2”、“3”、“11],
    [“2”、“职责/非”、“0”、“1”、“1”、“1”、“1”、“1”、“1”];
    //我们需要提前知道部门的数量,以便加快速度
    const numOfDepartments=12;
    //首先,这些部门没有工人
    让countForEachDepartment=数组(numOfDepartments)。填充(0);
    让我们参考世界其他地区的部门;
    //检查每一行
    data.forEach((行,索引)=>{
    //始终删除前两列,因为它们是无用的
    row.shift();
    row.shift();
    //我们是单数还是偶数?
    如果(索引%2){
    //偶数行:我们计算数字
    row.forEach((列,索引)=>{
    //数组从1开始,我们将字符串转换为一个带-0的数字,只需将其相加
    countForEachDepartment[参考部门行[索引]-1]+=(列-0);
    })
    }否则{
    //奇数行:我们有将用作偶数行参考的部门的编号
    referrenceToDepartmentsInRow=行;
    }
    });
    
    控制台日志(countForEachDepartment)此结构错误,应使用数组和对象的组合。在复杂的数组中没有任何“奇特”的计数方法。因此一个工作者必须有两行记录?我编辑了问题@SphinxI编辑了问题@akxe示例数组不是有效的javascript。至少提供一个有效的起点。人们似乎想帮助你,但你没有尽到自己的责任:1。我编辑了问题并分享了我的代码。2.我认为添加信息就足以回答这些问题@Jay@Y.E.S.你能分享你用来计算员工人数的循环吗?我不确定我是否正确理解了这个问题——它相当模糊。您希望您的输出是什么?这些员工ID和部门ID是作为输入提供的,以便您知道要计算什么,还是要计算所有内容(即,对于每个员工,将部门ID映射到分配给他们的次数),我想数一数每个员工被分配到哪个部门的次数。谢谢您的回答@Markus Madeja
    ["worker", "1"]
    ["depermant", "Duty/Not"]
    ["2", "1"]
    ["2", "1"]
    ["8", "1"]
    ["3", "0"]
    ["1", "0"]
    ["12", "1"]
    ["10", "1"]
    ["5", "0"]
    ["14", "1"]
    ["4", "1"]
    ["2", "1"]
    ["4", "1"]
    ["6", "1"]
    ["6", "0"]
    ["6", "0"]
     ["3", "1"]
    
    var count = [], i, value, total = 0;
    for (i = 0; i < array.length; i++) {
        value = array[i];
        if (typeof count[value] === "undefined") {
            count[value] = 1;
    
        } else {
            count[value]++;
    
        }
    }