我有一系列数字的单维数组:
var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904'];
我试图在它旁边插入每个数字的数字之和来创建一个二维数组,以便输出为:
[ [ '9493-4937-288383-8473', 96 ],
[ '4838-38403-8484', 65 ],
[ '9384-3848-4978-4944', 96 ],
[ '3920-2108-2845-1904', 58 ] ]
不幸的是,我的代码:
for (var i = 0; i < x.length; i ++) {
var y = x[i].replace(/[- )(]/g,'');
var sum = 0;
var z = y;
while (z > 0) {
sum = sum + z % 10;
z = Math.floor(z / 10);
}
var xWithSum = [x[i]];
xWithSum.push(sum);
console.log(xWithSum);
}
而是导致以下输出:
[ '9493-4937-288383-8473', 96 ]
[ '4838-38403-8484', 65 ]
[ '9384-3848-4978-4944', 96 ]
[ '3920-2108-2845-1904', 58 ]
也就是说,我最终得到了四个独立的二维数组,而不是一个带有四个项目的二维数组 .
有人请告诉我我的(新手)JavaScript方式的错误吗?
7 回答
您需要将
xWithSum
推送到结果数组 .您还可以使用
.map()
在数组的每个元素上运行函数并返回结果数组 .你可以迭代元素和字符进行求和 .
还有一个“你可以”:
代替
做点什么
此外,您计算总和的方式也不起作用,因为您尝试将16位整数加载到javascript编号中 . 这不起作用,javascript数字没那么精确 . 您可以这样计算总和:
难道你不能......在它上面创建一个数组并将结果推送到该数组?
您可以使用
Array.prototype.reduce
将字符串数组缩减为所需格式,如下所示: