查找嵌套数组的总和
Finding the sum of a nested array
我尝试查找嵌套数组所有数字的总和,但我无法正常工作。这是我尝试过的:
function arraySum(i) {
sum = 0;
for (a = 0; a < i.length; a++) {
if (typeof i[a] == 'number') {
sum += i[a];
} else if (i[a] instanceof Array) {
sum += arraySum(i[a]);
}
}
return sum;
}
当您使用数组[[1,2,3],4,5]
尝试时,它会6
为答案,而不是15
。有人知道哪里有错误吗?
代码的问题在于sum
和a
变量是全局的,而不是局部的。因此,你会得到一个无限循环(函数中第一个条目的 a 被第二个条目重置,因此再次处理相同的元素)。
通过将var
添加到声明sum
和a
的位置来修复它,以使它们成为函数的本地:
function arraySum(i) {
var sum=0; // missing var added
for(var a=0;a<i.length;a++){ // missing var added
if(typeof i[a]=="number"){
sum+=i[a];
}else if(i[a] instanceof Array){
sum+=arraySum(i[a]);
}
}
return sum;
}
演示:http://jsbin.com/eGaFOLA/2/edit
我知道已经
晚了,但他们说"永远不会迟到":)
const sumNestedArray = arr => arr.flat(Infinity).reduce((a,b)=> a+b, 0)
const sumNestedArray = arr => arr.flat(Infinity).reduce((a,b)=> a+b, 0)
console.log(sumNestedArray([1,[2], [2, 3, [4]]]))
sumNestedArray([1,[2], [2, 3, [4]]])
对于 2018 年,此解决方案干净且功能强大:
let arr = [[ 1, 2, 3], 4, 5]
arr.flat().reduce((d, i) => d + i)
平坦和减少的文档。
例如递归
function arraySum(x) {
var sum = 0, i;
if (typeof x === 'number')
return x;
else if (x instanceof Array)
for (i = 0; i < x.length; ++i)
sum += arraySum(x[i]);
return sum;
}
arraySum([[1,2,3],4,5]); // 15
我没有对此进行优化,以便清楚,您可能需要在递归之前添加更多逻辑。
你的不工作的原因是因为你需要同时var
sum
和a
。
你在那里缺少两个var
。您已在窗口范围内隐式声明了sum
和a
:
function arraySum(i) {
**var** sum=0;
for(**var** a=0;a<i.length;a++){
if(typeof i[a]=="number"){
sum+=i[a];
}else if(i[a] instanceof Array){
sum+=arraySum(i[a]);
}
}
return sum;
}
首先,为什么使用"i"作为函数的输入? 我们使用"i"来表示正在运行的索引。关于您的问题,您希望"a"在您的循环中是本地的,而不是"for(a=0;..."而是写"for(var a=0;"
<html>
<body>
<script>
function NestedArraySummation(arr)
{
var sum=0;
for(var i=0;i<arr.length;i++)
{
if(typeof arr[i]=="number")
sum=sum+arr[i];
else if(arr[i] instanceof Array)
sum=sum+NestedArraySummation(arr[i]);
}
return sum;
}
var MyArray=[1,[2,3],4,10,[1,2]];
var Sum=NestedArraySummation(MyArray);
document.write(Sum);
</script>
</body>
</html>
这可以通过 lodash _.flattenDeep
和 _.sum
来完成:
const arr = [[1, 2, 3], 4, 5];
arraySum(arr);
function arraySum(arr) {
var arrFlattens = _.flattenDeep(arr);
// => [1, 2, 3, 4, 5]
console.log(_.sum(arrFlattens));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
你来了:
(我的假设是,您希望将字符串(例如"13")解析为数字,以便将它们包含在总和中。如果没有,只需将isNumber
更改为 typeof val === 'number'
。
function arraySum(arr) {
let sum = 0;
while (arr.length) {
const val = arr.pop();
const isArray = typeof val === 'object' && val.length !== undefined;
const isNumber = !isArray && !isNaN(sum + parseFloat(val));
if (isArray && val.length) {
sum += arraySum(val);
}
else if (isNumber) {
sum += parseFloat(val);
}
}
return sum;
}
console.log(arraySum([])); //0
console.log(arraySum([1, 1, 1, [3, 4, [8]], [4]])); //22
console.log(arraySum([1, 1, [], {}, 'l', 1, [3, 4, [8]], [4]])); //22
这是很久以前发布的,但它可能会帮助其他人。我做了以下操作,它似乎工作得很好
function countArray (array) {
//iterate through the array
for(let i = 0;i < array.length; i++){
//check if element of array is an array, and if it is, run method flat() to the whole array.
if(Array.isArray(array[i])){
array = array.flat()
}
}
//return the sum of the elements of the array
return array.reduce((a,b) => a + b);
}
from __builtin__ import int
def nestedLists(mylist):
sum = 0
if checkIfAllInt(mylist):
result = addList(mylist)
return result
else:
for value in mylist:
sum = sum + nestedLists(value)
return sum
def addList(listdata):
if(type(listdata) is int):
return listdata
else:
return sum(listdata)
def checkIfAllInt(listdata):
check = True
if(type(listdata) is int):
return check
else:
for value in listdata:
if(not type(value) is int):
check = False
return check
return check
print nestedLists([1,[2,3,[4,5,[6,7]]]])
相关文章:
- 从多维嵌套json数组创建下拉列表
- 如何通过json对象数组为嵌套对象赋值
- 为循环嵌套的Javascript未按预期返回数组
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- MongoDB嵌套对象数组后查询
- 从对象数组中动态创建嵌套json
- 使用Angular.js解析JSON中的嵌套对象数组
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 将JS对象数组转换为嵌套形式的最有效方法
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 嵌套在 ng 重复中的拼接数组
- JavaScript格式的对象数组嵌套到子对象中
- JSON 将对象数组嵌套到表
- 如何获取数组嵌套对象子对象的父对象| MeteorJs-Astronomy
- 从数组嵌套JSON
- 使用AngularJS的JSON对象在数组嵌套在一个数组中,我怎么能得到数据到html
- 深入研究JavaScript中的一组嵌套对象
- 如何获得数组嵌套在对象的总和
- 将数组嵌套到主干模型中