mmr*_*151 2 javascript algorithm recursion nested multidimensional-array
我正试图和我的伙伴一起玩,他解决了8m 7s中提到的问题,对我来说已经有20米了.我无法弄清楚如何在javascript中处理无限制的嵌套数组.
问题是这样的:
// i will be an array, containing integers, strings and/or arrays like itself.
// Sum all the integers you find, anywhere in the nest of arrays.
Run Code Online (Sandbox Code Playgroud)
所以
arraySum([[1,2,false],'4','5']) will return 3 (passed)
arraySum([[1,2,3],4,5]) will return 15 (passed)
arraySum([[[[[[[[[1]]]]]]]], 1]) will return 2 (failed)
Run Code Online (Sandbox Code Playgroud)
我写的代码是:
function arraySum(i) {
sum = 0;
tmp =0;
for (var a=0; a<i.length; a++){
if (i[a] instanceof Array) {
ar = i[a];
for (var j=0; j<ar.length; j++){
tmp +=ar[j];
}
}
if (typeof i[a] == "number")
sum += i[a];
console.log(sum);
}
return sum + tmp;
Run Code Online (Sandbox Code Playgroud)
}
正如你所看到的,它无法处理我失败的最后一种情况,因为我无法弄清楚如何在JS中处理无限的嵌套.
任何想法将不胜感激.也试着在8m 7s之前完成它,我的好友完成了.
Ian*_*Ian 16
在if (i[a] instanceof Array) {部件内部,您将不得不使用递归来操作具有相同arraySum功能的嵌套数组,而不仅仅是使用另一个循环.试试这个:
var arraySum = (function () {
"use strict";
var sumFunc, isArray;
sumFunc = function (arr) {
var sum, i, j, cur, toAdd;
sum = 0;
for (i = 0, j = arr.length; i < j; i++) {
cur = arr[i];
toAdd = 0;
if (isArray(cur)) {
toAdd = sumFunc(cur);
} else if (typeof cur === "number") {
toAdd = cur;
}
sum += toAdd;
}
return sum;
};
isArray = Array.isArray || function (obj) {
return Object.prototype.toString.call(obj) === "[object Array]";
};
return sumFunc;
}());
Run Code Online (Sandbox Code Playgroud)
演示: http ://jsfiddle.net/Q7JPM/1
该函数只循环遍历数组中的所有项,并返回内部找到的任何数字的总和.如果该项本身是一个数组,则调用arraySum并传递该数组...将结果添加到总和中.如果它是一个数字,它只是将其加到总和上.
| 归档时间: |
|
| 查看次数: |
3994 次 |
| 最近记录: |