请原谅我,如果这是基本的或已经被问过,但我坚持这个问题,我觉得它一定是简单的,我没有看到。
我想使用递归(完成!)添加数组中的所有数字,并且我缺少一个语句来忽略所有其他类型的值。 例如:
var arr = [1,'a','b',2,[1],'c']
sumValues(arr) // => 4 .
function sumValues(arr){
if(arr.length === 0){
return 0;
} // if the array is empty
if(arr.length > 0){
if(Array.isArray(arr[0])){
return sumValues(arr[0]);
} // if the next element is an array
return arr.shift() + sumValues(arr);
}
}
答案 0 :(得分:2)
您可以使用Sheets("ABC").Select
i = Worksheets("ABC").Range("C2").Value + 1
Do Until Cells(i - 1, 5).Value >= Worksheets("ABC").Range("C5").Value
Cells(i, 5).Value = Cells(i - 1, 5).Value + 0.01
i = i + 1
Loop
来确定变量是否是Number.isFinite(value)
或NaN
以外的数字。
根据此测试,检查并有条件地将值添加到求和中。
Infinity
答案 1 :(得分:0)
您可以使用isNaN()
来测试某些内容是否为数字。
通过使用布尔反转运算符!
,您可以测试它是否为数字:
!isNaN(variable)
基本上它说:如果变量不是数字
双重否定是正数,因此它变为:如果变量是数字
function sumValues(arr){
if(Array.isArray(arr)) {
if(arr.length > 0) {
// Get the first value and remove it from the array.
var first = arr.shift();
// Test if it's numeric.
if(!isNaN(first)) {
// If it is, parse the value, add the rest resulting array values.
return parseInt(first) + parseInt(sumValues(arr));
}
// if the first item is an array, we need to iterate that one too.
if(Array.isArray(first)) {
return parseInt(sumValues(first)) + parseInt(sumValues(arr));
}
// It isn't a number, just continue with what's left of the array.
return parseInt(sumValues(arr));
}
// The array is empty, return 0.
return 0;
}
// It isn't an array
else {
// Is it an number?
if(!isNaN(arr)) {
// return the number
return parseInt(arr);
}
// return 0, it's a dead end.
return 0;
}
}
var arr = [1,'a','b',2,[1],'c'];
console.log(sumValues(arr)) // => 4 .
arr = [1,'3','b',2,[1,[4,3]],'c'];
console.log(sumValues(arr)) // => 14 .
arr = 'foobar';
console.log(sumValues(arr)) // => 0 .
arr = '10';
console.log(sumValues(arr)) // => 10 .
arr = ['foobar',10,'20',[10,20,'foobar']];
console.log(sumValues(arr)) // => 60 .
答案 2 :(得分:0)
您正在挤压数组,无需创建自己的缩减功能。使用Array#reduce
压缩数组。每次迭代时,检查当前元素是否为数字;如果是,将其添加到累加器;如果没有,继续前进。
使其递归(如下例所示)检查当前元素是否为数组;如果是,则将元素上的函数调用结果添加到累加器。
const input = [1,'a','b',2,[1],'c'];
const sumValues = i =>
i.reduce((m, e) => m + (e instanceof Array ? sumValues(e) : (isNaN(e) ? 0 : e)), 0);
console.log(sumValues(input));