JavaScript的 - 在相同的行和列值的总和 [英] JavaScript - Sum of values in same rows and columns

查看:113
本文介绍了JavaScript的 - 在相同的行和列值的总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有JavaScript数组与数字0和1,我需要在相同的行和列的所有号码的总和(如果我想象我的阵列中的两个维度)。我想创建资金用于在第一个数组的每一个值,第二个阵列。结果

二维数组可视化的第一个项目(价值X-Y表):结果
1 1 1 1 1 的结果
1 ,1,1,1,1结果
1 ,1,1,1,1结果
1 ,1,1,1,1结果
1 ,1,1,1,1结果
(总:8值在索引0; 0(与值本身除外))

REAL数组我有:
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

(总:8值在索引0)

二维数组可视化第二项:结果 1 1 1 1 ,< b> 1 的结果
1, 1 中,1,1,1结果
1, 1 中,1,1,1结果
1, 1 中,1,1,1结果
1, 1 中,1,1,1搜索结果
(总:8值在索引1; 0)结果
这样,我需要通过整个数组循环。

二维数组可视化第二个项目零的分隔符:结果 1 1 1 1 1 的结果1, 1 中,1,1,1结果
1,0,1,1,1结果
1,<击> 1 ,1,1,1-结果
1,<击> 1 ,1,1,1-结果
(总:5值与索引1; 0)结果
零后的值,我不想在计数。

有关previous表结果表应该是这样......结果
8,5,8,8,8结果
8,5,8,8,8结果
4,X,6,6,6-结果
8,5,8,8,8结果
8,5,8,8,8结果

非常感谢你的帮助!


解决方案

  VAR解析度= []; //将一维数组持有的款项
VAR哈尔= [
   [1,1,1,1],
   [1,1,1,1],
   [1,0,0,1],
   [1,1,0,0]
]; //你的数组
变种vArr = []; //现在,让我们创建一个数组的数组与哈尔的列对于(VAR J = 0; J&LT;哈尔[0]。长度; J ++){
  变种临时= [];
  对于(VAR I = 0; I&LT; hArr.length;我++){
      temp.push(哈尔[I] [J]);
  }
  vArr.push(临时);
}//总和所有在该行的元素 - 合纵连横
功能SumVH(后腿,VIND){
  变种总和= 0;
  //添加水平元素
  //往左边
  为(变量I =(VIND-1); I&GT; = 0;我 - ){
    //如果发现一个0,休息
    如果(哈尔[后] [I] == 0){
      打破;
    }
    总和+ =哈尔[后肢] [I];
  }  //在右边
  对于(VAR I =(VIND + 1); I&LT;哈尔[后肢]。长度;我++){
    //如果发现一个0,休息
    如果(哈尔[后] [I] == 0){
      打破;
    }
    总和+ =哈尔[后肢] [I];
  }  //增加垂直元素
  //朝上方
  为(变量I =(后-1); I&GT; = 0;我 - ){
    //如果发现一个0,休息
    如果(vArr [VIND] [I] == 0){
      打破;
    }
    总和+ = vArr [VIND] [I];
  }  //朝底
  对于(VAR I =(后腿+ 1); I&LT; vArr [VIND]。长度;我++){
    //如果发现一个0,休息
    如果(vArr [VIND] [I] == 0){
      打破;
    }
    总和+ = vArr [VIND] [I];
  }
  //console.log(\"hInd=\"+hInd+VIND =+ VIND +总和=+总和);
  返回总和;
}//经过主阵列,并得到结果
变种sumR = 0;
//每一行的总和
对于(VAR I = 0; I&LT; hArr.length;我++){
   对于(VAR J = 0; J&LT;哈尔[I]。长度; J ++){
      sumR = SumVH(I,J);
      res.push(sumR);
   }
}

请检查一下,让你期望它的工作我知道,如果是工作。
RES 变量保存的结果。

I have JavaScript array with numbers 0 and 1 and I need to make a sum of all numbers in same row and column (if I imagine my array in two dimensions). I want to create second array with sums for every single value in first array.

2D array visualization for first item (X-Y table of values):
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
(Sum: 8 for value at index 0;0 (with value itself excluded))

Real array I have:
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
(Sum: 8 for value at index 0)

2D array visualization for second item:
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1

(Sum: 8 for value at index 1;0)
This way I need to loop through whole array.

2D array visualization for second item with zero separator:
1,1,1,1,1
1,1,1,1,1
1,0,1,1,1
1,1,1,1,1
1,1,1,1,1
(Sum: 5 for value at index 1;0)
Values after zero I don't want to count in.

For previous table the result table should be like...
8,5,8,8,8
8,5,8,8,8
4,x,6,6,6
8,5,8,8,8
8,5,8,8,8

Thank you very much for your help!

解决方案

var res = [];  //the 1D array to hold the sums
var hArr =  [
   [ 1, 1, 1, 1 ],
   [ 1, 1, 1, 1 ],
   [ 1, 0, 0, 1 ],
   [ 1, 1, 0, 0 ]
]; //your array


var vArr = []; //Now lets create an array of arrays with the columns of hArr

for (var j=0; j<hArr[0].length; j++) {
  var temp = [];
  for (var i=0; i<hArr.length; i++) {
      temp.push(hArr[i][j]);
  }
  vArr.push(temp);
}

//sum all the element in the line - Vertically and Horizontally
function SumVH (hInd, vInd) {
  var sum = 0;
  //add horizontal elements
  //to the left
  for(var i=(vInd-1); i>=0; i--) {
    //if a 0 is found, break
    if (hArr[hInd][i] == 0) {
      break;
    }
    sum += hArr[hInd][i];
  }

  //to the right
  for(var i=(vInd+1); i<hArr[hInd].length; i++) {
    //if a 0 is found, break
    if (hArr[hInd][i] == 0) {
      break;
    }
    sum += hArr[hInd][i];
  }

  //add vertical elements
  //towards top
  for(var i=(hInd-1); i>=0; i--) {
    //if a 0 is found, break
    if(vArr[vInd][i] == 0) {
      break;
    }
    sum += vArr[vInd][i];
  }

  //towards bottom
  for(var i=(hInd+1); i<vArr[vInd].length; i++) {
    //if a 0 is found, break
    if(vArr[vInd][i] == 0) {
      break;
    }
    sum += vArr[vInd][i];
  }  
  //console.log("hInd="+hInd+" vInd="+vInd+" Sum="+sum);
  return sum;
}

// go through the main array and get result
var sumR = 0;
//sum of each row
for (var i=0; i<hArr.length; i++) {
   for (var j=0; j<hArr[i].length; j++) {    
      sumR = SumVH(i,j);
      res.push(sumR);
   }   
}

Please check it and let me know if it is working as you expect it to work. res variable holds the result.

这篇关于JavaScript的 - 在相同的行和列值的总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆