如何找到由数组和数字组成的数组的总和

时间:2017-05-17 18:33:10

标签: javascript arrays

如何找到由数组和数字组成的数组之和,如[1,2,3,[4,5,6,[7,8,9],10,11,12], 13,14,15]

4 个答案:

答案 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对象。