提取任意给定数组中的所有数字,然后将它们全部相加
Pull all numbers in any given array and then add them all together.
我试图提出一个函数,可以采取任何类型的数组(与对象,其他数组,字符串,数字,布尔值等),并拉出所有的数字(即使它们是字符串),然后将它们全部加在一起返回总和。
到目前为止,我试图想出一个函数,首先找到所有的整数,并将它们全部加在一起,然后再担心将任何表示数字的字符串转换为整数并添加它们:
function arraySum(array) {
// the array could be containing integers, strings, objects and/or arrays like itself.
// Sum all the integers you find, anywhere in the nest of arrays.
var sum = 0
var numArray = []
for (i=0; i > array.length; i++) {
if (typeOf array[i] == Number) {
numArray.push(i);
for (j=0; j> numArray.length; j++) {
sum += numArray[j];
return sum;
};
}
}
}
arraySum([1,2,3,["Here is a string", "67", 67], {key: "55", value: 55}, true, 56]);
我期望sum的返回值是184
sum应该返回306(一旦函数更新为将数字字符串转换为整数)
var a = [1, 2, 3, ["Here is a string", "67", 67], {key: "55", value: 55 }, true, 56];
function arraySum(obj) {
var sum = 0;
var num = Number(obj);
if (typeof obj === 'boolean') {
return 0;
}
if (typeof num === 'number' && !isNaN(num)) {
return num;
}
if (typeof obj !== 'object') {
return 0;
}
if (obj.length) {
for (var i = 0; i < obj.length; i++) {
sum += arraySum(obj[i]);
}
}
else {
for (var p in obj) {
sum += arraySum(obj[p]);
}
}
return sum;
}
console.log(arraySum(a));
这是jq 1.5 (https://stedolan.github.io/jq/)中的解决方案。作为一个jq程序,它将接受任意JSON输入。由于您的输入不是严格的JSON,下面显示了处理您建议的输入的方法:
# summation_walk scans for numbers or numeric strings
# everywhere except in the key names, and adds them up:
def summation_walk:
walk( if type == "object" then .[] else . end )
| walk( if type == "string" then tonumber?
elif (type | . == "boolean" or . == "null") then empty
else .
end )
| flatten
| add;
[1,2,3,["Here is a string", "67", 67], {key: "55", value: 55}, true, 56]
| summation_walk
收益率:
306
您正在循环内部进行循环。第一个循环需要找到所有的数字,然后您可以循环并添加填充在第二个数组中的数字:
编辑:修正了你代码中的许多错误,它在这里工作:jsfiddle
function arraySum(arr) {
var sum=0, numArray=[]; // <==== correct initialisation
// first, find numbers
for (var i=0; i<arr.length; i++) {
if (typeof(arr[i]) === 'number') numArray.push(arr[i]);
}
// now we can add numbers
for (var j=0; j<numArray.length; j++) {
sum += numArray[j];
}
return sum; // <====== put return here [1, 2, 3, 56]
}
var sum = arraySum([1,2,3,["Here is a string", "67", 67], {key: "55", value: 55}, true, 56]);
console.log(sum); // 62
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- JavaScript-切换“;全部检查”;复选框true/false
- 滚动然后捕捉到顶部而不是取消捕捉
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- 如何获取页面上所有图像的来源,然后将它们全部放在一个分区中
- 淡入多个元素,然后将它们全部淡出并替换
- 检查字符串的一部分,全部读入,然后分开
- 提取任意给定数组中的所有数字,然后将它们全部相加
- Regex JavaScript-如何检查字符串是否全部是字母,然后是数字