从数组中提取和添加数字

时间:2015-06-30 09:01:41

标签: javascript arrays function numbers

我正在尝试编写一个函数来提取和汇总所有整数,无论​​多少级别(我在这里谈论多维数组)都来自给定数组。这是我到目前为止所得到的:

function addTheNumbers (someArray) {
    var onlyNumbers = someArray.filter(function(a){ return typeof(a)=='number'; });
    for (i = 0; i < onlyNumbers.length; i++) {
        // idk
    }
}
var sampleArray = ['word',['a','b','c'],12314,'longer phrase',5,[123,123,2],10,3874,32];
addTheNumbers(sampleArray);

我有两个问题:

1)我觉得我所拥有的过滤器只会提取在给定数组中独立的数字而不是所有数组中的所有数字...不确定如何解决它。< / p>

2)我知道,一旦我提取了所有数字,它们将被存储在一个对象/数组中,我将不得不以某种方式迭代它以将它们全部添加在一起,但......我再一次不知道如何继续。

JSFiddle让事情变得更轻松。

4 个答案:

答案 0 :(得分:1)

试试这个。

&#13;
&#13;
var temp = [];
function addTheNumbers(someArray) {

	for (var i = 0; i < someArray.length; i++) {
			if(typeof someArray[i] == "number")
			temp.push(someArray[i]);
		else if(typeof someArray[i] == "object"){
			addTheNumbers(someArray[i]);
		}
	};
}


var sampleArray = ['word', ['a', 'b', 'c'], 12314, 'longer phrase', 5, [123, 123, 2], 10, 3874, 32];
addTheNumbers(sampleArray);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

正如其他答案所说,更简单的方法是递归结构。

function addTheNumbers(arr) {
    return arr.reduce(function (sum, currentValue) {
        if (currentValue instanceof Array) {
            return sum + addTheNumbers(currentValue);
        }
        return sum + (typeof currentValue == "number" ? currentValue : 0);
    }, 0);
}
var sampleArray = ['word',['a','b','c'],12314,'longer phrase',5,[123,123,2],10,3874,32];
alert(addTheNumbers(sampleArray)); // returns 16483

答案 2 :(得分:0)

    var number = [];
    function addTheNumbers(someArray) {

        for (var i = 0; i < someArray.length; i++) {
        if(/^-?\d+\.?\d*$/.test(someArray[i])) {
        number.push(someArray[i]);
    }       
    else if(someArray[i] !== null && typeof someArray[i] === 'object'){
                addTheNumbers(someArray[i]);
            }
        };
    }


    var sampleArray = ['word', ['a', 'b', 'c'], 12314, 'longer phrase', 5, [123, 123, 2], 10, 3874, 32];
addTheNumbers(sampleArray);

希望它会有所帮助;)

答案 3 :(得分:0)

r()是减少数组的回调。

&#13;
&#13;
var sampleArray = ['word', ['a', 'b', 'c'], 12314, 'longer phrase', 5, [123, [123, 0], 2], 10, 3874, 32];
function r(res, el) {
    if (typeof el === 'number') {
        res.push(el);
    } else if (Array.isArray(el)) {
        res = res.concat(el.reduce(r, []));
    }
    return res;
}
document.write('<pre>' + JSON.stringify(sampleArray.reduce(r, []), null, 4) + '</pre>');
&#13;
&#13;
&#13;