我有数字0和1的JavaScript数组,我需要在同一行和列中对所有数字求和(如果我想象我的数组是二维的)。我想创建第二个数组,其中包含第一个数组中每个值的总和。
第一项的二维数组可视化(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
(Sum:索引0处的值为8; 0(除了值本身))
真实阵列我有:
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
(总和:索引0处的值为8)
第二项的二维数组可视化:
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
(总和:索引1处的值为8; 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-
(总和:索引1处的值为5; 0)
零后的值我不想算数。
对于上一个表,结果表应该是......
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
非常感谢你的帮助!
答案 0 :(得分:2)
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);
}
}
请检查并告知我它是否按预期工作。
res
变量保存结果。