如何找到由数组和数字组成的数组之和,如[1,2,3,[4,5,6,[7,8,9],10,11,12], 13,14,15]
答案 0 :(得分:1)
一个快速而又脏的递归函数来查找总数:
<div class="signature-wrapper" id="signature"><table id="signature-table"><tbody><tr id="signature-line-1"><td rowspan="2"><img id="image" src="https://s-media-cache-ak0.pinimg.com/originals/8b/f5/00/8bf500fb1a32d726c98e23b8c3e3ecf9.jpg" alt="Logo"></td><td>Name | Position</td></tr><tr id="signature-line-2"><td>E: example@example.com | P: 000.000.0000</td></tr></tbody></table></div>
答案 1 :(得分:0)
您可以使用递归的fields()
来获取数组中所有数字的总和。
reduce()
答案 2 :(得分:0)
您可以展平数组,然后像普通数组一样对所有元素求和。
DEMO(ES6语法)
// this is pseudo code
activeDocument.selection.selectAll().show(false);
// this doesn't work
免责声明:let arr = [1,2,3,[4,5,6,[7,8,9],10,11,12],13,14,15];
function flatten(arr) {
const flat = [].concat(...arr);
return flat.some(Array.isArray) ? flatten(flat) : flat;
}
//Flatten array, and sum elements
let result = flatten(arr).reduce((a,b) => a + b, 0);
console.log(result);
取自:How to flatten nested array in javascript?
答案 3 :(得分:0)
一个简单的递归解决方案:
function isObject(v){ return typeof v === "object" && Boolean(v) }
function plus(a,b){ return a+b }
function sum(v){
//deal with Arrays
return Array.isArray(v)? v.map(sum).reduce(plus, 0):
//iterators and ArrayLike Objects
isObject(v) && isNaN(+v)? Array.from(v, sum).reduce(plus, 0):
//parse everything else into a number
+v || 0;
}
var arr = [1,2,3,[4,5,6,[7,8,9],10,11,12],13,14,15];
console.log(sum(arr));
但要注意没有限制的发电机。
.map(sum)
部分处理嵌套结构(如子数组),并将所有内容解析为数字;修女数字值转换为0
.reduce(plus, 0)
部分,然后进行实际添加。
isObject(v) && isNaN(+v)
部分首先尝试将此Object转换为Number,就像Number
类的实例或实现valueOf
接口并返回数值的其他对象一样。只有在失败时,对象才被解释为迭代器(如果它实现Symbol.iterator
)或被视为ArrayLike对象。